def preprocess_rev(data_4, ver='v2'):
    """
    # 액면분할 수정주가 반영영
    data_2 = data.iloc[:186]
    columns = ['close', 'open', 'high', 'low', 'eps', 'bps', 'dividend_per_stock']
    for column in columns:
        data_2[column] = data_2[column] / 5.0
    data_3 = data.iloc[189:]
    data_4 = pd.concat([data_2, data_3],axis=0)
    data_4 = data_4.dropna()
    """
    #
    del data_4['eps']
    del data_4['per']
    data_4 = data_4.dropna()
    # ['date_'] = data_4['date']
    data_4['open_'] = data_4['open']
    data_4['high_'] = data_4['high']
    data_4['low_'] = data_4['low']
    data_4['close_'] = data_4['close']
    data_4['volume_'] = data_4['volume']

    # 보조지표 추가
    # 1) 이평선(SMA, EMA, WMA) (w = 5,10,15,20,30,60,120)
    data_4['ma_5'] = ta.SMA(data_4.close, timeperiod=5)
    data_4['ma_10'] = ta.SMA(data_4.close, timeperiod=10)
    data_4['ma_15'] = ta.SMA(data_4.close, timeperiod=15)
    data_4['ma_20'] = ta.SMA(data_4.close, timeperiod=20)
    data_4['ma_30'] = ta.SMA(data_4.close, timeperiod=30)
    data_4['ma_60'] = ta.SMA(data_4.close, timeperiod=60)
    data_4['ma_120'] = ta.SMA(data_4.close, timeperiod=120)

    data_4['ema_5'] = ta.EMA(data_4.close, timeperiod=5)
    data_4['ema_10'] = ta.EMA(data_4.close, timeperiod=10)
    data_4['ema_15'] = ta.EMA(data_4.close, timeperiod=15)
    data_4['ema_20'] = ta.EMA(data_4.close, timeperiod=20)
    data_4['ema_30'] = ta.EMA(data_4.close, timeperiod=30)
    data_4['ema_60'] = ta.EMA(data_4.close, timeperiod=60)
    data_4['ema_120'] = ta.EMA(data_4.close, timeperiod=120)

    data_4['wma_5'] = ta.WMA(data_4.close, timeperiod=5)
    data_4['wma_10'] = ta.WMA(data_4.close, timeperiod=10)
    data_4['wma_15'] = ta.WMA(data_4.close, timeperiod=15)
    data_4['wma_20'] = ta.WMA(data_4.close, timeperiod=20)
    data_4['wma_30'] = ta.WMA(data_4.close, timeperiod=30)
    data_4['wma_60'] = ta.WMA(data_4.close, timeperiod=60)
    data_4['wma_120'] = ta.WMA(data_4.close, timeperiod=120)

    data_4['ma_v5'] = ta.SMA(data_4.volume, timeperiod=5)
    data_4['ma_v10'] = ta.SMA(data_4.volume, timeperiod=10)
    data_4['ma_v20'] = ta.SMA(data_4.volume, timeperiod=20)
    data_4['ma_v60'] = ta.SMA(data_4.volume, timeperiod=60)
    data_4['ma_v120'] = ta.SMA(data_4.volume, timeperiod=120)

    data_4['volume_inst_sub'] = data_4['volume_inst_buy'] - data_4[
        'volume_inst_sell']
    data_4['volume_fore_sub'] = data_4['volume_fore_buy'] - data_4[
        'volume_fore_sell']

    data_4['ma_inst_v5'] = ta.SMA(data_4.volume_inst_sub, timeperiod=5)
    data_4['ma_inst_v10'] = ta.SMA(data_4.volume_inst_sub, timeperiod=10)
    data_4['ma_inst_v20'] = ta.SMA(data_4.volume_inst_sub, timeperiod=20)
    data_4['ma_inst_v60'] = ta.SMA(data_4.volume_inst_sub, timeperiod=60)
    data_4['ma_inst_v120'] = ta.SMA(data_4.volume_inst_sub, timeperiod=120)

    data_4['ma_fore_v5'] = ta.SMA(data_4.volume_fore_sub, timeperiod=5)
    data_4['ma_fore_v10'] = ta.SMA(data_4.volume_fore_sub, timeperiod=10)
    data_4['ma_fore_v20'] = ta.SMA(data_4.volume_fore_sub, timeperiod=20)
    data_4['ma_fore_v60'] = ta.SMA(data_4.volume_fore_sub, timeperiod=60)
    data_4['ma_fore_v120'] = ta.SMA(data_4.volume_fore_sub, timeperiod=120)

    # 2) 볼린저밴드 (주가의 이동평균선을 중심으로 표준편차 범위를 표시)
    ubb, mbb, lbb = ta.BBANDS(data_4.close, 20, 2)
    data_4['ubb'] = ubb
    data_4['mbb'] = mbb
    data_4['lbb'] = lbb

    # 3) MACD 이동평균수렴확산 (단기(EMA12)와 장기(EMA26) EMA로 모멘텀을 추정)
    macd, macdsignal9, macdhist = ta.MACD(data_4.close,
                                          fastperiod=12,
                                          slowperiod=26,
                                          signalperiod=9)
    data_4['macd'] = macd
    data_4['macdsignal9'] = macdsignal9
    data_4['macdhist'] = macdhist

    # 4) RSI 상대강도지수 - 추세의 강도 파악, 과매수, 과매도 국면 판단
    data_4['rsi'] = ta.RSI(data_4.close, timeperiod=14)

    # 5) 스토캐스틱 오늘의 주가가 일정 동안 주가의 변동폭 중에서 어느 정도인 지?
    slowk, slowd = ta.STOCH(data_4.high,
                            data_4.low,
                            data_4.close,
                            fastk_period=5,
                            slowk_period=3,
                            slowk_matype=0,
                            slowd_period=3,
                            slowd_matype=0)
    fastk, fastd = ta.STOCHF(data_4.high,
                             data_4.low,
                             data_4.close,
                             fastk_period=5,
                             fastd_period=3,
                             fastd_matype=0)
    fastk_rsi, fastd_rsi = ta.STOCHRSI(data_4.close,
                                       timeperiod=14,
                                       fastk_period=5,
                                       fastd_period=3,
                                       fastd_matype=0)
    data_4['slowk'] = slowk
    data_4['slowd'] = slowd
    data_4['fastk'] = fastk
    data_4['fastd'] = fastd
    data_4['fastk_rsi'] = fastk_rsi
    data_4['fastd_rsi'] = fastd_rsi

    # 6) 기타 자주 사용되는 것들
    # CCI (Commodity Channel Index), williams'%R, parabolic SAR
    # ADX (Average Directional Movement Index)
    # plusDI(Plus Directional Indicator), plusDM Plus Directional Movement)
    # ATR (Average True Range), OBV (On Balance Volume) 거래량 분석을 통한 주가분석, Variance
    data_4['cci'] = ta.CCI(data_4.high,
                           data_4.low,
                           data_4.close,
                           timeperiod=14)
    data_4['willR'] = ta.WILLR(data_4.high,
                               data_4.low,
                               data_4.close,
                               timeperiod=14)
    data_4['sar'] = ta.SAR(data_4.high, data_4.low, acceleration=0, maximum=0)
    data_4['adx'] = ta.ADX(data_4.high,
                           data_4.low,
                           data_4.close,
                           timeperiod=14)
    data_4['plus_di'] = ta.PLUS_DI(data_4.high,
                                   data_4.low,
                                   data_4.close,
                                   timeperiod=14)
    data_4['plus_dm'] = ta.PLUS_DM(data_4.high, data_4.low, timeperiod=14)
    data_4['atr'] = ta.ATR(data_4.high,
                           data_4.low,
                           data_4.close,
                           timeperiod=14)
    data_4['obv'] = ta.OBV(data_4.close, data_4.volume)
    data_4['var'] = ta.VAR(data_4.close, timeperiod=5, nbdev=1)

    # 7) Pattern REcognition
    # Investopedia "The 5 Most Powerful Candlestick Patterns"
    # Three Line Strike, Three Black Crows
    # Evening Star, Abandoned Baby
    # df4['line_str'] = ta.CDL3LINESTRIKE(df4.open, df4.high, df4.low, df4.close)
    # df4['blk_crw'] = ta.CDL3BLACKCROWS(df4.open, df4.high, df4.low, df4.close)
    # df4['evn_star'] = ta.CDLEVENINGSTAR(df4.open, df4.high, df4.low, df4.close, penetration=0)
    # df4['abn_baby'] = ta.CDLABANDONEDBABY(df4.open, df4.high, df4.low, df4.close, penetration=0)

    scaling_col = [column for column in data_4.columns]
    for i in range(6):
        scaling_col.pop(0)
    data_rev = data_4.copy()
    feature_scaling(data_rev, scaling_strategy="z-score", column=scaling_col)

    return data_rev
Пример #2
0
    def extract_by_type(feature_type,
                        open_prices=None,
                        close_prices=None,
                        high_prices=None,
                        low_prices=None):
        # This function defines the features which are categorized with supporting technical indicators

        if feature_type == 'ROCP':
            rocp1 = talib.ROCP(close_prices, timeperiod=1)
            rocp2 = talib.ROCP(close_prices, timeperiod=2)
            feature.append(rocp1)
            feature.append(rocp2)
        if feature_type == 'OROCP':
            orocp = talib.ROCP(open_prices, timeperiod=1)
            feature.append(orocp)
        if feature_type == 'HROCP':
            hrocp = talib.ROCP(high_prices, timeperiod=1)
            feature.append(hrocp)
        if feature_type == 'LROCP':
            lrocp = talib.ROCP(low_prices, timeperiod=1)
            feature.append(lrocp)
        if feature_type == 'MACD':
            macd, signal, hist = talib.MACD(close_prices,
                                            fastperiod=12,
                                            slowperiod=26,
                                            signalperiod=9)
            norm_macd = numpy.nan_to_num(macd) / math.sqrt(
                numpy.var(numpy.nan_to_num(macd)))
            norm_signal = numpy.nan_to_num(signal) / math.sqrt(
                numpy.var(numpy.nan_to_num(signal)))
            norm_hist = numpy.nan_to_num(hist) / math.sqrt(
                numpy.var(numpy.nan_to_num(hist)))
            macdrocp = talib.ROCP(norm_macd + numpy.max(norm_macd) -
                                  numpy.min(norm_macd),
                                  timeperiod=1)
            signalrocp = talib.ROCP(norm_signal + numpy.max(norm_signal) -
                                    numpy.min(norm_signal),
                                    timeperiod=1)
            histrocp = talib.ROCP(norm_hist + numpy.max(norm_hist) -
                                  numpy.min(norm_hist),
                                  timeperiod=1)
            feature.append(norm_macd)
            feature.append(norm_signal)
            feature.append(norm_hist)
            feature.append(macdrocp)
            feature.append(signalrocp)
            feature.append(histrocp)
        if feature_type == 'RSI':
            rsi6 = talib.RSI(close_prices, timeperiod=6)
            rsi12 = talib.RSI(close_prices, timeperiod=12)
            rsi24 = talib.RSI(close_prices, timeperiod=24)
            rsi6rocp = talib.ROCP(rsi6 + 100., timeperiod=1)
            rsi12rocp = talib.ROCP(rsi12 + 100., timeperiod=1)
            rsi24rocp = talib.ROCP(rsi24 + 100., timeperiod=1)
            feature.append(rsi6 / 100.0 - 0.5)
            feature.append(rsi12 / 100.0 - 0.5)
            feature.append(rsi24 / 100.0 - 0.5)
            feature.append(rsi6rocp)
            feature.append(rsi12rocp)
            feature.append(rsi24rocp)
        if feature_type == 'UO':
            ult_osc = talib.ULTOSC(high_prices,
                                   low_prices,
                                   close_prices,
                                   timeperiod1=7,
                                   timeperiod2=14,
                                   timeperiod3=28)
            feature.append(ult_osc / 100.0 - 0.5)
        if feature_type == 'BOLL':
            upperband, middleband, lowerband = talib.BBANDS(close_prices,
                                                            timeperiod=5,
                                                            nbdevup=2,
                                                            nbdevdn=2,
                                                            matype=0)
            feature.append((upperband - close_prices) / close_prices)
            feature.append((middleband - close_prices) / close_prices)
            feature.append((lowerband - close_prices) / close_prices)
        if feature_type == 'MA':
            ma5 = talib.MA(close_prices, timeperiod=5)
            ma10 = talib.MA(close_prices, timeperiod=10)
            ma20 = talib.MA(close_prices, timeperiod=20)
            ma25 = talib.MA(close_prices, timeperiod=25)
            ma30 = talib.MA(close_prices, timeperiod=30)
            ma40 = talib.MA(close_prices, timeperiod=40)
            ma50 = talib.MA(close_prices, timeperiod=50)
            ma60 = talib.MA(close_prices, timeperiod=60)
            ma5rocp = talib.ROCP(ma5, timeperiod=1)
            ma10rocp = talib.ROCP(ma10, timeperiod=1)
            ma20rocp = talib.ROCP(ma20, timeperiod=1)
            ma25rocp = talib.ROCP(ma25, timeperiod=1)
            ma30rocp = talib.ROCP(ma30, timeperiod=1)
            ma40rocp = talib.ROCP(ma40, timeperiod=1)
            ma50rocp = talib.ROCP(ma50, timeperiod=1)
            ma60rocp = talib.ROCP(ma60, timeperiod=1)
            feature.append(ma5rocp)
            feature.append(ma10rocp)
            feature.append(ma20rocp)
            feature.append(ma25rocp)
            feature.append(ma30rocp)
            feature.append(ma40rocp)
            feature.append(ma50rocp)
            feature.append(ma60rocp)
            feature.append((ma5 - close_prices) / close_prices)
            feature.append((ma10 - close_prices) / close_prices)
            feature.append((ma20 - close_prices) / close_prices)
            feature.append((ma25 - close_prices) / close_prices)
            feature.append((ma30 - close_prices) / close_prices)
            feature.append((ma40 - close_prices) / close_prices)
            feature.append((ma50 - close_prices) / close_prices)
            feature.append((ma60 - close_prices) / close_prices)
        if feature_type == 'STOCH':
            slow_stoch_k, slow_stoch_d = talib.STOCH(high_prices,
                                                     low_prices,
                                                     close_prices,
                                                     fastk_period=5,
                                                     slowk_period=3,
                                                     slowk_matype=0,
                                                     slowd_period=3,
                                                     slowd_matype=0)
            fast_stoch_k, fast_stoch_d = talib.STOCHF(high_prices,
                                                      low_prices,
                                                      close_prices,
                                                      fastk_period=5,
                                                      fastd_period=3,
                                                      fastd_matype=0)
            fast_rsi_k, fast_rsi_d = talib.STOCHRSI(close_prices,
                                                    timeperiod=14,
                                                    fastk_period=5,
                                                    fastd_period=3,
                                                    fastd_matype=0)
            feature.append(slow_stoch_k / 100.0 - 0.5)
            feature.append(slow_stoch_d / 100.0 - 0.5)
            feature.append(fast_stoch_k / 100.0 - 0.5)
            feature.append(fast_stoch_d / 100.0 - 0.5)
            feature.append(fast_rsi_k / 100.0 - 0.5)
            feature.append(fast_rsi_d / 100.0 - 0.5)
        if feature_type == 'AO':
            median_price = (high_prices + low_prices) / 2
            ao = talib.SMA(median_price, 5) - talib.SMA(median_price, 34)
            feature.append(ao)
        if feature_type == 'ROC':
            roc5 = talib.ROC(close_prices, timeperiod=5)
            roc10 = talib.ROC(close_prices, timeperiod=10)
            roc20 = talib.ROC(close_prices, timeperiod=20)
            roc25 = talib.ROC(close_prices, timeperiod=25)
            feature.append(roc5)
            feature.append(roc10)
            feature.append(roc20)
            feature.append(roc25)
        if feature_type == 'WILLR':
            willr = talib.WILLR(high_prices,
                                low_prices,
                                close_prices,
                                timeperiod=14)
            feature.append(willr / 100.0 - 0.5)

        return feature
Пример #3
0
    def techIndi(self):
        try:
            daySqlOra = "SELECT NVL(MAX(SUBSTR(TRADE_TIME,1,8)),TO_CHAR(SYSDATE,'YYYYMMDD')) YMD FROM TRADE_TECH " \
                     "WHERE SUBSTR(TRADE_TIME,1,8) <> '%s' " \
                     % datetime.datetime.today().strftime("%Y%m%d")
            dateD = self.kiwoom.selectDBOra(daySqlOra)
            dateS = dateD[0][0]
        except Exception as e:
            e.msg = "techindi daySql 에러"
            print(e)

        try:
            sqlOra71 = "SELECT DISTINCT TRIM(A.STOCK_CODE) STOCK_CODE " \
                  "FROM TRADE_HOLD A " \
                  "WHERE A.YMD >= '20200401' " \
                  "  AND A.REQ_VOLUME <> 0" \
                  "UNION " \
                  "SELECT DISTINCT TRIM(B.STOCK_CODE) STOCK_CODE " \
                  "FROM TRADE_LIST B " \
                  "WHERE B.YMD >= '20200401' "

            summaryG = self.kiwoom.selectDBOra(sqlOra71)
        except Exception as e:
            e.msg = "techIndi Sql 에러"
            print(e)

        print("-----------------------------------------------------------------")
        print("["+ datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S") + "] " + "Process2 : 보조지표 만들기 시작!" )

        try:
            if len(summaryG) > 0:
                for row_data in summaryG:
                    try:
                        sql = "SELECT RN, STOCK_CODE, TRADE_TIME,  START_PRICE, HIGH_PRICE, LOW_PRICE, CURRENT_PRICE, VOLUME " \
                              "FROM ( " \
                              "       SELECT A.*, ROW_NUMBER() OVER(PARTITION BY STOCK_CODE ORDER BY TRADE_TIME DESC) RN" \
                              "                 , ROW_NUMBER() OVER(PARTITION BY STOCK_CODE ORDER BY TRADE_TIME ASC) RN2" \
                              "         FROM TRADE_CRR_BACK A" \
                              "        WHERE 1=1 " \
                              "          AND A.STOCK_CODE = '%s' " \
                              "          AND A.STOCK_CODE NOT IN ('155960','900090') " \
                              "      ) X " % row_data[0]

                        sql2 = "WHERE RN BETWEEN 1 AND 800 " \
                               "ORDER BY RN2"

                        summaryG = self.kiwoom.selectDBOra(sql + sql2)
                    except Exception as e:
                        print(e)

                    df = pd.DataFrame(summaryG)

                    try:
                        if len(df) > 0:
                            df.columns = ["rn", "stockCd", "tradeTime", "open", "high", "low", "close", "volume"]

                            # cloF = pd.Series(df.iloc[len(df) - 1]['open'], name='close')  # 3분봉 종가 만들어주는 로직
                            # clo = pd.Series(df.iloc[1:len(df)]['open'], name='close')
                            # clo = pd.DataFrame(clo.append(cloF))
                            # clo = clo.reset_index(drop=True)
                            #
                            # df = df.join(clo)

                            macd, macdsignal, macdhist = talib.MACD(df['close'], fastperiod=12, slowperiod=26,
                                                                    signalperiod=9)
                            slowk, slowd = talib.STOCH(df['high'], df['low'], df['close'], fastk_period=5, slowk_period=3,
                                                       slowk_matype=3,
                                                       slowd_period=3, slowd_matype=0)
                            fastk, fastd = talib.STOCHF(df['high'], df['low'], df['close'], fastk_period=20,
                                                        fastd_period=10)
                            sma5 = talib.SMA(df['close'], 5)
                            sma10 = talib.SMA(df['close'], 10)
                            sma20 = talib.SMA(df['close'], 20)
                            sma60 = talib.SMA(df['close'], 60)
                            sma120 = talib.SMA(df['close'], 120)
                            cci = talib.CCI(df['high'], df['low'], df['close'], 20)
                            rsi = talib.RSI(df['close'], 14)
                            roc1 = talib.ROC(df['close'], 1)
                            roc5 = talib.ROC(df['close'], 5)
                            rocr1 = talib.ROCR(df['close'], 1)
                            rocr5 = talib.ROCR(df['close'], 5)

                            df = df.join(pd.DataFrame(pd.Series(macd, name="MACD")))
                            df = df.join(pd.DataFrame(pd.Series(macdsignal, name="MACDSIG")))
                            df = df.join(pd.DataFrame(pd.Series(slowd, name="SLOWD")))
                            df = df.join(pd.DataFrame(pd.Series(fastd, name="FASTD")))
                            df = df.join(pd.DataFrame(pd.Series(sma5, name="SMA5")))
                            df = df.join(pd.DataFrame(pd.Series(sma10, name="SMA10")))
                            df = df.join(pd.DataFrame(pd.Series(sma20, name="SMA20")))
                            df = df.join(pd.DataFrame(pd.Series(sma60, name="SMA60")))
                            df = df.join(pd.DataFrame(pd.Series(sma120, name="SMA120")))
                            df = df.join(pd.DataFrame(pd.Series(cci, name="CCI")))
                            df = df.join(pd.DataFrame(pd.Series(rsi, name="RSI")))
                            df = df.join(pd.DataFrame(pd.Series(roc1, name="ROC1")))
                            df = df.join(pd.DataFrame(pd.Series(roc5, name="ROC5")))
                            df = df.join(pd.DataFrame(pd.Series(rocr1, name="ROCR1")))
                            df = df.join(pd.DataFrame(pd.Series(rocr5, name="ROCR5")))

                            df = df.fillna(0)

                            try:
                                for i in range(4, len(df)):
                                    if df.iloc[i]['SMA10'] == 0:
                                        dis10 = 0
                                    else:
                                        dis10 = float(df.iloc[i]['close']) / float(df.iloc[i]['SMA10']) * 100

                                    if df.iloc[i]['SMA20'] == 0:
                                        dis20 = 0
                                    else:
                                        dis20 = float(df.iloc[i]['close']) / float(df.iloc[i]['SMA20']) * 100

                                    file = open("C:/Users/jini/PycharmProjects/stock/sql/sqlOra72_1.sql", 'r') # TRADE_TECH에 데이터 넣기
                                    sqlOra72 = ''
                                    line = file.readline()
                                    while line:
                                        sqlOra72 += ' ' + line.strip('\n').strip('\t')
                                        line = file.readline()

                                    file.close()

                                    sqlOra72 = sqlOra72 % (
                                               df.iloc[i]['tradeTime'], df.iloc[i]['stockCd']
                                               , df.iloc[i - 3]['high'], df.iloc[i - 2]['high'], df.iloc[i - 1]['high']
                                               , df.iloc[i]['high'], df.iloc[i - 3]['low'], df.iloc[i - 2]['low'],
                                               df.iloc[i - 1]['low']
                                               , df.iloc[i]['low'], df.iloc[i - 3]['open'], df.iloc[i - 2]['open'],
                                               df.iloc[i - 1]['open']
                                               , df.iloc[i]['open'], df.iloc[i - 3]['close'], df.iloc[i - 2]['close']
                                               , df.iloc[i - 1]['close'], df.iloc[i]['close'], df.iloc[i - 3]['volume']
                                               , df.iloc[i - 2]['volume'], df.iloc[i - 1]['volume'],
                                               df.iloc[i]['volume']
                                               , (df.iloc[i - 2]['high'] - df.iloc[i - 3]['high']) / df.iloc[i - 3][
                                                   'high']
                                               , (df.iloc[i - 1]['high'] - df.iloc[i - 2]['high']) / df.iloc[i - 2][
                                                   'high']
                                               , (df.iloc[i]['high'] - df.iloc[i - 1]['high']) / df.iloc[i - 1]['high']
                                               , (df.iloc[i]['high'] - df.iloc[i - 3]['high']) / df.iloc[i - 3]['high']
                                               , (df.iloc[i]['high'] - df.iloc[i - 2]['high']) / df.iloc[i - 2]['high']
                                               , (df.iloc[i - 2]['low'] - df.iloc[i - 3]['low']) / df.iloc[i - 3]['low']
                                               , (df.iloc[i - 1]['low'] - df.iloc[i - 2]['low']) / df.iloc[i - 2]['low']
                                               , (df.iloc[i]['low'] - df.iloc[i - 1]['low']) / df.iloc[i - 1]['low']
                                               , (df.iloc[i]['low'] - df.iloc[i - 3]['low']) / df.iloc[i - 3]['low']
                                               , (df.iloc[i]['low'] - df.iloc[i - 2]['low']) / df.iloc[i - 2]['low']
                                               , df.iloc[i]['SMA5'], df.iloc[i]['SMA10'], df.iloc[i]['SMA20'], df.iloc[i]['SMA60']
                                               , df.iloc[i]['SMA120'], df.iloc[i]['RSI'], df.iloc[i]['CCI']
                                               , float(dis10)
                                               , float(dis20)
                                               , df.iloc[i]['MACD'], df.iloc[i]['MACDSIG'], df.iloc[i]['SLOWD'], df.iloc[i]['FASTD']
                                               , (max(df.iloc[i]['high'],df.iloc[i-1]['high'],df.iloc[i-2]['high']) - min(df.iloc[i]['low'],df.iloc[i-1]['low'],df.iloc[i-2]['low']))
                                               /  min(df.iloc[i]['low'],df.iloc[i-1]['low'],df.iloc[i-2]['low']) * 100
                                               , df.iloc[i]['MACD'] - df.iloc[i]['MACDSIG']
                                               , (df.iloc[i]['close'] - df.iloc[i]['high']) * 100 / df.iloc[i]['high']
                                               , (df.iloc[i]['close'] - max(df.iloc[i]['high'],df.iloc[i-1]['high'],df.iloc[i-2]['high'],df.iloc[i-3]['high'])) * 100 / max(df.iloc[i]['high'],df.iloc[i-1]['high'],df.iloc[i-2]['high'],df.iloc[i-3]['high'])
                                               , (df.iloc[i]['open'] - max(df.iloc[i]['high'],df.iloc[i-1]['high'],df.iloc[i-2]['high'],df.iloc[i-3]['high'])) * 100 / max(df.iloc[i]['high'],df.iloc[i-1]['high'],df.iloc[i-2]['high'],df.iloc[i-3]['high'])
                                               , (df.iloc[i]['close'] - min(df.iloc[i]['low'],df.iloc[i-1]['low'],df.iloc[i-2]['low'])) * 100 / min(df.iloc[i]['low'],df.iloc[i-1]['low'],df.iloc[i-2]['low'])
                                               , df.iloc[i]['tradeTime'])

                                    try:
                                        self.kiwoom.updateDBOra(sqlOra72)
                                    except Exception as e:
                                        print(e)
                            except Exception as e:
                                print(e)

                    except Exception as e:
                        print(e)

        except Exception as e:
            print(e)

        print("["+ datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S") + "] " + "Process2 : 보조지표 만들기 끝!" )
 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()
    def execute(self):
        ema = talib.EMA(self.close, self.ema_period)
        rsi = talib.RSI(self.close, self.rsi_period)
        stoch_K, stoch_D = talib.STOCHF(self.high,
                                        self.low,
                                        self.close,
                                        fastk_period=self.stoch_period)
        macd, macdsignal, macdhist = talib.MACD(self.close)
        sar = talib.SAR(self.high, self.low)
        mom = talib.MOM(self.close, self.mom_period)
        adx = talib.ADX(self.high, self.low, self.close, self.adx_period)
        willr = talib.WILLR(self.high, self.low, self.close, self.willr_period)
        cci = talib.CCI(self.high, self.low, self.close, self.cci_period)
        roc = talib.ROC(self.close, self.roc_period)
        stochrsi_K, stochrsi_D = talib.STOCHRSI(self.close,
                                                self.stochrsi_period)
        trix = talib.TRIX(self.close, self.trix_period)
        mfi = talib.MFI(self.high, self.low, self.close, self.volume,
                        self.mfi_period)
        ultosc = talib.ULTOSC(self.high, self.low, self.close,
                              self.ultosc_1_period, self.ultosc_2_period,
                              self.ultosc_3_period)
        aroon_down, aroon_up = talib.AROON(self.high, self.low,
                                           self.aroon_period)
        aroonosc = talib.AROONOSC(self.high, self.low, self.aroonosc_period)
        atr = talib.ATR(self.high, self.low, self.close, self.atr_period)
        ad = talib.AD(self.high, self.low, self.close, self.volume)
        obv = talib.OBV(self.close, self.volume)
        adosc = talib.ADOSC(self.high, self.low, self.close, self.volume,
                            self.adoscfast_period, self.adoscslow_period)

        spread_ema = ema - self.close
        spread_stoch = stoch_K - stoch_D
        spread_stochrsi = stochrsi_K - stochrsi_D
        spread_aroon = aroon_up - aroon_down

        return np.array([
            self.close,
            spread_ema,
            rsi,
            macd,
            macdhist,
            stoch_K,
            spread_stoch,
            sar,
            mom,
            adx,
            willr,
            cci,
            roc,
            spread_stochrsi,
            trix,
            mfi,
            ultosc,
            aroon_down,
            aroon_up,
            spread_aroon,
            aroonosc,
            atr,
            ad,
            obv,
            adosc,
        ]).transpose()
Пример #6
0
def STOCHF(data, **kwargs):
    _check_talib_presence()
    _, phigh, plow, pclose, _ = _extract_ohlc(data)
    return talib.STOCHF(phigh, plow, pclose, **kwargs)
Пример #7
0
def STOCHF(DataFrame, fastk_period=5, fastd_period=3, fastd_matype=0):
    fastk, fastd = talib.STOCHF(DataFrame.high.values, DataFrame.low.values, DataFrame.close.values,
                               fastk_period, fastd_period, fastd_matype)
    return pd.DataFrame({'STOCHF_FASTK': fastk, 'STOCHF_FASTD': fastd}, index=DataFrame.index)
Пример #8
0
def add_momentum_indicators(data_list):
    # (momentum) Indicators common for all Time-frames
    for data in data_list:
        # 1) ADX - Average Directional Movement Index
        real = talib.ADX(data.High, data.Low, data.Close, timeperiod=14)
        data['ADX_14'] = real

        # 2) ADXR - Average Directional Movement Index Rating
        real = talib.ADXR(data.High, data.Low, data.Close, timeperiod=14)
        data['ADXR_14'] = real

        # 3) APO - Absolute Price Oscillator
        real = talib.APO(data.Close, fastperiod=12, slowperiod=26, matype=0)
        data['APO'] = real

        # 4) AROON - Aroon
        aroondown, aroonup = talib.AROON(data.High, data.Low, timeperiod=14)
        data['Aroon_down_14'] = aroondown
        data['Aroon_up_14'] = aroonup

        # 5) AROONOSC - Aroon Oscillator
        real = talib.AROONOSC(data.High, data.Low, timeperiod=14)
        data['AROONOSC_14'] = real

        # 6) BOP - Balance Of Power
        real = talib.BOP(data.Open, data.High, data.Low, data.Close)
        data['BOP'] = real

        # 7) CCI - Commodity Channel Index
        real = talib.CCI(data.High, data.Low, data.Close, timeperiod=14)
        data['CCI_14'] = real

        # 8) CMO - Chande Momentum Oscillator
        real = talib.CMO(data.Close, timeperiod=14)
        data['CMO_14'] = real

        # 9) DX - Directional Movement Index
        real = talib.DX(data.High, data.Low, data.Close, timeperiod=14)
        data['DMI_14'] = real

        # 10) MACD - Moving Average Convergence/Divergence
        macd, macdsignal, macdhist = talib.MACD(data.Close,
                                                fastperiod=12,
                                                slowperiod=26,
                                                signalperiod=9)
        data['macd'] = macd
        data['macd_sig'] = macdsignal
        data['macd_hist'] = macdhist

        # 11) MFI - Money Flow Index
        real = talib.MFI(data.High,
                         data.Low,
                         data.Close,
                         data.Volume,
                         timeperiod=14)
        data['MFT_14'] = real

        # 12) MINUS_DI - Minus Directional Indicator
        real = talib.MINUS_DI(data.High, data.Low, data.Close, timeperiod=14)
        data['MINUS_DI_14'] = real

        # 13) MINUS_DM - Minus Directional Movement
        real = talib.MINUS_DM(data.High, data.Low, timeperiod=14)
        data['MINUS_DM_14'] = real

        # 14) MOM - Momentum
        real = talib.MOM(data.Close, timeperiod=14)
        data['MOM_14'] = real

        # 15) PLUS_DI - Plus Directional Indicator
        real = talib.PLUS_DI(data.High, data.Low, data.Close, timeperiod=14)
        data['PLUS_DI_14'] = real

        # 16) PLUS_DM - Plus Directional Movement
        real = talib.PLUS_DM(data.High, data.Low, timeperiod=14)
        data['PLUS_DM_14'] = real

        # 17) PPO - Percentage Price Oscillator
        real = talib.PPO(data.Close, fastperiod=12, slowperiod=26, matype=0)
        data['PPO'] = real

        # 18) ROC - Rate of change : ((price/prevPrice)-1)*100
        real = talib.ROC(data.Close, timeperiod=14)
        data['ROC_14'] = real

        # 19) RSI - Relative Strength Index
        real = talib.RSI(data.Close, timeperiod=14)
        data['RSI_14'] = real

        # 20) STOCH - Stochastic
        slowk, slowd = talib.STOCH(data.High,
                                   data.Low,
                                   data.Close,
                                   fastk_period=5,
                                   slowk_period=3,
                                   slowk_matype=0,
                                   slowd_period=3,
                                   slowd_matype=0)
        data['slowk'] = slowk
        data['slowd'] = slowd

        # 21) STOCHF - Stochastic Fast
        fastk, fastd = talib.STOCHF(data.High,
                                    data.Low,
                                    data.Close,
                                    fastk_period=5,
                                    fastd_period=3,
                                    fastd_matype=0)
        data['fastk'] = fastk
        data['fastd'] = fastd

        # 22) TRIX - 1-day Rate-Of-Change (ROC) of a Triple Smooth EMA
        real = talib.TRIX(data.Close, timeperiod=20)
        data['TRIX_20'] = real

        # 23) ULTOSC - Ultimate Oscillator
        real = talib.ULTOSC(data.High,
                            data.Low,
                            data.Close,
                            timeperiod1=7,
                            timeperiod2=14,
                            timeperiod3=28)
        data['ULTOSC'] = real

        # 24) WILLR - Williams' %R
        real = talib.WILLR(data.High, data.Low, data.Close, timeperiod=14)
        data['WILLR_14'] = real

    data_weekly = data_list[6]
    data_monthly = data_list[7]
    data_15min = data_list[2]
    data_daily = data_list[5]
    data_60min = data_list[4]
    data_1min = data_list[0]
    data_5min = data_list[1]
    data_30min = data_list[3]

    # Create (momentum) indicators for a only to a particular timeframe here..

    return data_list
Пример #9
0
def third_making_indicator(dataframe):
    Open_lis = np.array(dataframe['open'], dtype='float')
    High_lis = np.array(dataframe['high'], dtype='float')
    Low_lis = np.array(dataframe['low'], dtype='float')
    Clz_lis = np.array(dataframe['weigted_price'], dtype='float')
    Vol_lis = np.array(dataframe['volume'], dtype='float')

    ##지표##
    SMA_3_H = ta.SMA(High_lis, timeperiod=3)
    SMA_3_L = ta.SMA(Low_lis, timeperiod=3)
    SMA_3_C = ta.SMA(Clz_lis, timeperiod=3)
    SMA_5_H = ta.SMA(High_lis, timeperiod=5)
    SMA_5_L = ta.SMA(Low_lis, timeperiod=5)
    SMA_5_C = ta.SMA(Clz_lis, timeperiod=5)
    SMA_7_H = ta.SMA(High_lis, timeperiod=7)
    SMA_7_L = ta.SMA(Low_lis, timeperiod=7)
    SMA_7_C = ta.SMA(Clz_lis, timeperiod=7)
    RSI_3_H = ta.RSI(High_lis, timeperiod=3)
    RSI_3_L = ta.RSI(Low_lis, timeperiod=3)
    RSI_3_C = ta.RSI(Clz_lis, timeperiod=3)
    RSI_5_H = ta.RSI(High_lis, timeperiod=5)
    RSI_5_L = ta.RSI(Low_lis, timeperiod=5)
    RSI_5_C = ta.RSI(Clz_lis, timeperiod=5)
    RSI_7_H = ta.RSI(High_lis, timeperiod=7)
    RSI_7_L = ta.RSI(Low_lis, timeperiod=7)
    RSI_7_C = ta.RSI(Clz_lis, timeperiod=7)
    ADX = ta.ADX(High_lis, Low_lis, Clz_lis, timeperiod=7)
    ADXR = ta.ADXR(High_lis, Low_lis, Clz_lis, timeperiod=7)
    ADX_2 = ta.ADX(High_lis, Low_lis, Clz_lis, timeperiod=5)
    ADXR_2 = ta.ADXR(High_lis, Low_lis, Clz_lis, timeperiod=5)
    Aroondown, Aroonup = ta.AROON(High_lis, Low_lis, timeperiod=14)
    Aroondown_2, Aroonup_2 = ta.AROON(High_lis, Low_lis, timeperiod=7)
    Aroonosc = ta.AROONOSC(High_lis, Low_lis, timeperiod=14)
    Aroonosc_2 = ta.AROONOSC(High_lis, Low_lis, timeperiod=7)
    BOP = ta.BOP(Open_lis, High_lis, Low_lis, Clz_lis)
    CMO = ta.CMO(Clz_lis, timeperiod=7)
    DX = ta.DX(High_lis, Low_lis, Clz_lis, timeperiod=7)
    MINUS_DI = ta.MINUS_DI(High_lis, Low_lis, Clz_lis, timeperiod=7)
    PLUSDI = ta.PLUS_DI(High_lis, Low_lis, Clz_lis, timeperiod=7)
    PPO = ta.PPO(Clz_lis, fastperiod=12, slowperiod=26, matype=0)
    PPO_2 = ta.PPO(Clz_lis, fastperiod=6, slowperiod=13, matype=0)
    ROCR100 = ta.ROCR100(Clz_lis, timeperiod=10)
    ROCR100_2 = ta.ROCR100(Clz_lis, timeperiod=5)
    STOCHF_f, _ = ta.STOCHF(High_lis,
                            Low_lis,
                            Clz_lis,
                            fastk_period=3,
                            fastd_period=2,
                            fastd_matype=0)
    Fastk, _ = ta.STOCHRSI(Clz_lis,
                           timeperiod=7,
                           fastk_period=5,
                           fastd_period=3,
                           fastd_matype=0)
    TRIX = ta.TRIX(Clz_lis, timeperiod=7)
    ULTOSC = ta.ULTOSC(High_lis,
                       Low_lis,
                       Clz_lis,
                       timeperiod1=7,
                       timeperiod2=14,
                       timeperiod3=28)
    WILLR = ta.WILLR(High_lis, Low_lis, Clz_lis, timeperiod=14)
    WILLR_2 = ta.WILLR(High_lis, Low_lis, Clz_lis, timeperiod=7)
    NATR = ta.NATR(High_lis, Low_lis, Clz_lis, timeperiod=7)
    integer = ta.HT_TRENDMODE(Clz_lis)

    #append
    dataframe['SMA_3_H'] = SMA_3_H
    dataframe['SMA_3_L'] = SMA_3_L
    dataframe['SMA_3_C'] = SMA_3_C
    dataframe['SMA_5_H'] = SMA_5_H
    dataframe['SMA_5_L'] = SMA_5_L
    dataframe['SMA_5_C'] = SMA_5_C
    dataframe['SMA_7_H'] = SMA_7_H
    dataframe['SMA_7_L'] = SMA_7_L
    dataframe['SMA_7_C'] = SMA_7_C
    dataframe['RSI_3_H'] = (RSI_3_H / 100.) * 2 - 1.
    dataframe['RSI_3_L'] = (RSI_3_L / 100.) * 2 - 1.
    dataframe['RSI_3_C'] = (RSI_3_C / 100.) * 2 - 1.
    dataframe['RSI_5_H'] = (RSI_5_H / 100.) * 2 - 1.
    dataframe['RSI_5_L'] = (RSI_5_L / 100.) * 2 - 1.
    dataframe['RSI_5_C'] = (RSI_5_C / 100.) * 2 - 1.
    dataframe['RSI_7_H'] = (RSI_7_H / 100.) * 2 - 1.
    dataframe['RSI_7_L'] = (RSI_7_L / 100.) * 2 - 1.
    dataframe['RSI_7_C'] = (RSI_7_C / 100.) * 2 - 1.
    dataframe['ADX'] = (ADX / 100.) * 2 - 1.
    dataframe['ADX_2'] = (ADX_2 / 100.) * 2 - 1.
    dataframe['ADXR'] = (ADXR / 100.) * 2 - 1.
    dataframe['ADXR_2'] = (ADXR_2 / 100.) * 2 - 1.
    dataframe['Aroondown'] = (Aroondown / 100.) * 2 - 1
    dataframe['Aroondown_2'] = (Aroondown_2 / 100.) * 2 - 1
    dataframe['Aroonup'] = (Aroonup / 100.) * 2 - 1
    dataframe['Aroonup_2'] = (Aroonup_2 / 100.) * 2 - 1
    dataframe['Aroonosc'] = Aroonosc / 100.
    dataframe['Aroonosc_2'] = Aroonosc_2 / 100.
    dataframe['BOP'] = BOP
    dataframe['CMO'] = CMO / 100.
    dataframe['DX'] = (DX / 100.) * 2 - 1
    dataframe['MINUS_DI'] = (MINUS_DI / 100.) * 2 - 1
    dataframe['PLUSDI'] = (PLUSDI / 100.) * 2 - 1
    dataframe['PPO'] = PPO
    dataframe['PPO_2'] = PPO_2
    dataframe['ROCR100'] = ((ROCR100 / 100.) - 1.0) * 100.
    dataframe['STOCHF_f'] = (STOCHF_f / 100.) * 2 - 1
    dataframe['Fastk'] = (Fastk / 100.) * 2 - 1
    dataframe['TRIX'] = TRIX * 10.
    dataframe['ULTOSC'] = (ULTOSC / 100.) * 2 - 1
    dataframe['WILLR'] = (WILLR / 100.) * 2 + 1
    dataframe['WILLR_2'] = (WILLR_2 / 100.) * 2 + 1
    dataframe['NATR'] = NATR * 2 - 1
    dataframe['integer'] = integer

    return dataframe
Пример #10
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)
Пример #11
0
def Stock_Ana(arg_stock, str_prev_date, str_today):
    sear_comp_id = arg_stock[0]
    #日線資料讀取
    strsql = "select quo_date, open, high, low, close, vol from STOCK_QUO "
    strsql += "where "
    strsql += "SEAR_COMP_ID='" + sear_comp_id + "' and "
    strsql += "QUO_DATE between '" + str_prev_date + "' and '" + str_today + "' "
    strsql += "order by QUO_DATE "

    cursor = conn.execute(strsql)
    result = cursor.fetchall()

    none_flag = False
    if len(result) > 0:
        df = pd.DataFrame(
            result, columns=['date', 'open', 'high', 'low', 'close', 'vol'])
        #print(df)
    else:
        none_flag = True

    #關閉cursor
    cursor.close()

    ls_result = []
    if none_flag == False:
        #LIST轉換為Numpy Array
        npy_high = np.array(df['high'])
        npy_low = np.array(df['low'])
        npy_close = np.array(df['close'])

        stock_vol = df['vol'].tail(6) / 1000  #取近六天成交量,並由股換算為張
        last_vol = df['vol'].tail(1) / 1000  #取最近一天成交量,並換算為張
        last_open = df['open'].tail(1)
        last_close = df['close'].tail(1)
        prev_close = df['close'].shift(1).tail(1)
        avg_vol = stock_vol.mean()  #取平均

        #最近一天交易日,成交量漲幅
        rt = 0
        if avg_vol > 0:
            rt = (last_vol.iloc[0] - avg_vol) / avg_vol * 100

        #最近一天交易日,K棒本體漲幅
        kbody_chg = 0
        if last_open.iloc[0] > 0:
            kbody_chg = (last_close.iloc[0] -
                         last_open.iloc[0]) / last_open.iloc[0] * 100

        #最近一天交易日當天漲幅
        rise_rt = 0
        if prev_close.iloc[0] > 0:
            rise_rt = (last_close.iloc[0] -
                       prev_close.iloc[0]) / prev_close.iloc[0] * 100

        #計算20MA
        ma20 = talib.MA(npy_close, timeperiod=20, matype=0)
        df['ma20'] = ma20

        #最近一個交易日20MA值
        last_20ma = df['ma20'].tail(1)

        #倒數第2個交易日20MA值
        prev_20ma = df['ma20'].shift(1).tail(1)

        #print('## last_close=' + str(last_close))
        #print(prev_close.iloc[0])

        # http://www.tadoc.org/indicator/STOCH.htm
        slowk, slowd = talib.STOCH(npy_high,
                                   npy_low,
                                   npy_close,
                                   fastk_period=9,
                                   slowk_period=3,
                                   slowk_matype=0,
                                   slowd_period=3,
                                   slowd_matype=0)

        print("slowk=" + str(slowk[-1]))
        print("slowd=" + str(slowd[-1]))

        # http://www.tadoc.org/indicator/STOCHF.htm
        fastk, fastd = talib.STOCHF(npy_high,
                                    npy_low,
                                    npy_close,
                                    fastk_period=9,
                                    fastd_period=9,
                                    fastd_matype=0)

        print("fastk=" + str(fastk[-1]))
        print("fastd=" + str(fastd[-1]))

        # http://www.tadoc.org/indicator/STOCHRSI.htm
        fastk, fastd = talib.STOCHRSI(npy_close,
                                      timeperiod=9,
                                      fastk_period=3,
                                      fastd_period=3,
                                      fastd_matype=0)

        print("fastk=" + str(fastk[-1]))
        print("fastd=" + str(fastd[-1]))

        if (prev_close.iloc[0] <= prev_20ma.iloc[0]) and \
           (last_close.iloc[0] > last_20ma.iloc[0]):
            print("##" + arg_stock[0] + "##" + arg_stock[1] + "##\n")
        """
		#三條均線變異數介於0~1間、最近一天成交量相對平均量成長20%、當天上漲3%以下、
		#最近一天收盤價在8MA跟50MA之上、成交量均量需大於500張
		if (var_val > 0 and var_val < 1) and \
		   rt >= 20 and \
		   (rise_rt > 0 and rise_rt < 3) and \
		   (last_close.iloc[0] > last_8ma.iloc[0]) and \
		   (last_close.iloc[0] > last_50ma.iloc[0]) and \
		   avg_vol > 500:

			#讀取個股籌碼資料
			strsql  = "select FR_BAS_CNT, IT_BAS_CNT, DE_BAS_CNT, RANK "
			strsql += "from REPORT_CHIP_ANA "
			strsql += "where "
			strsql += "SEAR_COMP_ID='" + sear_comp_id + "' "

			cursor = conn.execute(strsql)
			result = list(cursor.fetchone())

			if len(result) > 0:
				fr_bas_cnt = str(result[0])
				it_bas_cnt = str(result[1])
				de_bas_cnt = str(result[2])
				rank = result[3]
			else:
				fr_bas_cnt = "0"
				it_bas_cnt = "0"
				de_bas_cnt = "0"
				rank = " "

			#關閉cursor
			cursor.close()

			#print("##" + arg_stock[0] + "##" + arg_stock[1] + "##" + fr_bas_cnt + "##" + it_bas_cnt + "##" + de_bas_cnt + "##" + rank + "##\n")

			ls_result = [[arg_stock[0],arg_stock[1],var_val,rt,fr_bas_cnt,it_bas_cnt,de_bas_cnt,rank]]
			df_result = pd.DataFrame(ls_result, columns=['代號', '名稱', 'var', 'burst_rt','外資買賣超天數','投信買賣超天數','自營商買賣超天數','類別'])
		"""
    if len(ls_result) == 0:
        df_result = pd.DataFrame()

    return df_result
Пример #12
0
                   matype=0)
df['ROC'] = ta.ROC(np.array(df['Adj Close'].shift(1)), timeperiod=n)
df['ROCP'] = ta.ROCP(np.array(df['Adj Close'].shift(1)), timeperiod=n)
df['ROCR'] = ta.ROCR(np.array(df['Adj Close'].shift(1)), timeperiod=n)
df['ROCR100'] = ta.ROCR100(np.array(df['Adj Close'].shift(1)), timeperiod=n)
df['slowk'], df['slowd'] = ta.STOCH(np.array(df['High'].shift(1)),
                                    np.array(df['Low'].shift(1)),
                                    np.array(df['Adj Close']),
                                    fastk_period=5,
                                    slowk_period=3,
                                    slowk_matype=0,
                                    slowd_period=3,
                                    slowd_matype=0)
df['fastk'], df['fastd'] = ta.STOCHF(np.array(df['High'].shift(1)),
                                     np.array(df['Low'].shift(1)),
                                     np.array(df['Adj Close']),
                                     fastk_period=5,
                                     fastd_period=3,
                                     fastd_matype=0)
# df['fastk'], df['fastd'] =ta.STOCHRIS(np.array(df['Adj Close'].shift(1)), timeperiod=N, fastk_period=5, fastd_period=3, fastd_matype=0)
df['TRIX'] = ta.TRIX(np.array(df['Adj Close'].shift(1)), timeperiod=n)
df['ULTOSC'] = ta.ULTOSC(np.array(df['High'].shift(1)),
                         np.array(df['Low'].shift(1)),
                         np.array(df['Adj Close']),
                         timeperiod1=7,
                         timeperiod2=14,
                         timeperiod3=28)
df['WILLR'] = ta.WILLR(np.array(df['High'].shift(1)),
                       np.array(df['Low'].shift(1)),
                       np.array(df['Adj Close'].shift(1)),
                       timeperiod=n)
Пример #13
0
    def test_stoch(self):
        result = pandas_ta.stoch(self.high,
                                 self.low,
                                 self.close,
                                 fast_k=14,
                                 slow_k=14,
                                 slow_d=14)
        self.assertIsInstance(result, DataFrame)
        self.assertEqual(result.name, "STOCH_14_14_14")
        self.assertEqual(len(result.columns), 4)

        result = pandas_ta.stoch(self.high, self.low, self.close)
        self.assertIsInstance(result, DataFrame)
        self.assertEqual(result.name, "STOCH_14_5_3")

        try:
            tal_stochf = tal.STOCHF(self.high, self.low, self.close)
            tal_stoch = tal.STOCH(self.high, self.low, self.close)
            tal_stochdf = DataFrame({
                "STOCHF_14": tal_stochf[0],
                "STOCHF_3": tal_stochf[1],
                "STOCH_5": tal_stoch[0],
                "STOCH_3": tal_stoch[1]
            })
            pdt.assert_frame_equal(result, tal_stochdf)
        except AssertionError as ae:
            try:
                stochfk_corr = pandas_ta.utils.df_error_analysis(
                    result.iloc[:, 0], tal_stochdf.iloc[:, 0], col=CORRELATION)
                self.assertGreater(stochfk_corr, CORRELATION_THRESHOLD)
            except Exception as ex:
                error_analysis(result.iloc[:, 0], CORRELATION, ex)

            try:
                stochfd_corr = pandas_ta.utils.df_error_analysis(
                    result.iloc[:, 1], tal_stochdf.iloc[:, 1], col=CORRELATION)
                self.assertGreater(stochfd_corr, CORRELATION_THRESHOLD)
            except Exception as ex:
                error_analysis(result.iloc[:, 1],
                               CORRELATION,
                               ex,
                               newline=False)

            try:
                stochsk_corr = pandas_ta.utils.df_error_analysis(
                    result.iloc[:, 2], tal_stochdf.iloc[:, 2], col=CORRELATION)
                self.assertGreater(stochsk_corr, CORRELATION_THRESHOLD)
            except Exception as ex:
                error_analysis(result.iloc[:, 2],
                               CORRELATION,
                               ex,
                               newline=False)

            try:
                stochsd_corr = pandas_ta.utils.df_error_analysis(
                    result.iloc[:, 3], tal_stochdf.iloc[:, 3], col=CORRELATION)
                self.assertGreater(stochsd_corr, CORRELATION_THRESHOLD)
            except Exception as ex:
                error_analysis(result.iloc[:, 3],
                               CORRELATION,
                               ex,
                               newline=False)
Пример #14
0
    def extract_by_type(self,
                        feature_type,
                        open_prices=None,
                        close_prices=None,
                        high_prices=None,
                        low_prices=None):
        if feature_type == 'ROCP':
            rocp = talib.ROCP(close_prices, timeperiod=1)
            self.feature.append(rocp)
        if feature_type == 'OROCP':
            orocp = talib.ROCP(open_prices, timeperiod=1)
            self.feature.append(orocp)
        if feature_type == 'HROCP':
            hrocp = talib.ROCP(high_prices, timeperiod=1)
            self.feature.append(hrocp)
        if feature_type == 'LROCP':
            lrocp = talib.ROCP(low_prices, timeperiod=1)
            self.feature.append(lrocp)
        if feature_type == 'MACD':
            macd, signal, hist = talib.MACD(close_prices,
                                            fastperiod=12,
                                            slowperiod=26,
                                            signalperiod=9)
            norm_macd = numpy.nan_to_num(macd) / math.sqrt(
                numpy.var(numpy.nan_to_num(macd)))
            norm_signal = numpy.nan_to_num(signal) / math.sqrt(
                numpy.var(numpy.nan_to_num(signal)))
            norm_hist = numpy.nan_to_num(hist) / math.sqrt(
                numpy.var(numpy.nan_to_num(hist)))
            macdrocp = talib.ROCP(norm_macd + numpy.max(norm_macd) -
                                  numpy.min(norm_macd),
                                  timeperiod=1)
            signalrocp = talib.ROCP(norm_signal + numpy.max(norm_signal) -
                                    numpy.min(norm_signal),
                                    timeperiod=1)
            histrocp = talib.ROCP(norm_hist + numpy.max(norm_hist) -
                                  numpy.min(norm_hist),
                                  timeperiod=1)
            # self.feature.append(macd / 100.0)
            # self.feature.append(signal / 100.0)
            # self.feature.append(hist / 100.0)
            self.feature.append(norm_macd)
            self.feature.append(norm_signal)
            self.feature.append(norm_hist)

            self.feature.append(macdrocp)
            self.feature.append(signalrocp)
            self.feature.append(histrocp)
        if feature_type == 'RSI':
            rsi6 = talib.RSI(close_prices, timeperiod=6)
            rsi12 = talib.RSI(close_prices, timeperiod=12)
            rsi24 = talib.RSI(close_prices, timeperiod=24)
            rsi6rocp = talib.ROCP(rsi6 + 100., timeperiod=1)
            rsi12rocp = talib.ROCP(rsi12 + 100., timeperiod=1)
            rsi24rocp = talib.ROCP(rsi24 + 100., timeperiod=1)
            self.feature.append(rsi6 / 100.0 - 0.5)
            self.feature.append(rsi12 / 100.0 - 0.5)
            self.feature.append(rsi24 / 100.0 - 0.5)
            # self.feature.append(numpy.maximum(rsi6 / 100.0 - 0.8, 0))
            # self.feature.append(numpy.maximum(rsi12 / 100.0 - 0.8, 0))
            # self.feature.append(numpy.maximum(rsi24 / 100.0 - 0.8, 0))
            # self.feature.append(numpy.minimum(rsi6 / 100.0 - 0.2, 0))
            # self.feature.append(numpy.minimum(rsi6 / 100.0 - 0.2, 0))
            # self.feature.append(numpy.minimum(rsi6 / 100.0 - 0.2, 0))
            # self.feature.append(numpy.maximum(numpy.minimum(rsi6 / 100.0 - 0.5, 0.3), -0.3))
            # self.feature.append(numpy.maximum(numpy.minimum(rsi6 / 100.0 - 0.5, 0.3), -0.3))
            # self.feature.append(numpy.maximum(numpy.minimum(rsi6 / 100.0 - 0.5, 0.3), -0.3))
            self.feature.append(rsi6rocp)
            self.feature.append(rsi12rocp)
            self.feature.append(rsi24rocp)
        if feature_type == 'UO':
            ult_osc = talib.ULTOSC(high_prices,
                                   low_prices,
                                   close_prices,
                                   timeperiod1=7,
                                   timeperiod2=14,
                                   timeperiod3=28)
            self.feature.append(ult_osc / 100.0 - 0.5)
        if feature_type == 'BOLL':
            upperband, middleband, lowerband = talib.BBANDS(close_prices,
                                                            timeperiod=5,
                                                            nbdevup=2,
                                                            nbdevdn=2,
                                                            matype=0)
            self.feature.append((upperband - close_prices) / close_prices)
            self.feature.append((middleband - close_prices) / close_prices)
            self.feature.append((lowerband - close_prices) / close_prices)
        if feature_type == 'MA':
            ma5 = talib.MA(close_prices, timeperiod=5)
            ma10 = talib.MA(close_prices, timeperiod=10)
            ma20 = talib.MA(close_prices, timeperiod=20)
            ma30 = talib.MA(close_prices, timeperiod=30)
            ma60 = talib.MA(close_prices, timeperiod=60)
            ma90 = talib.MA(close_prices, timeperiod=90)
            ma120 = talib.MA(close_prices, timeperiod=120)
            ma180 = talib.MA(close_prices, timeperiod=180)
            #ma360 = talib.MA(close_prices, timeperiod=360)
            #ma720 = talib.MA(close_prices, timeperiod=720)
            ma5rocp = talib.ROCP(ma5, timeperiod=1)
            ma10rocp = talib.ROCP(ma10, timeperiod=1)
            ma20rocp = talib.ROCP(ma20, timeperiod=1)
            ma30rocp = talib.ROCP(ma30, timeperiod=1)
            ma60rocp = talib.ROCP(ma60, timeperiod=1)
            ma90rocp = talib.ROCP(ma90, timeperiod=1)
            ma120rocp = talib.ROCP(ma120, timeperiod=1)
            ma180rocp = talib.ROCP(ma180, timeperiod=1)
            #ma360rocp = talib.ROCP(ma360, timeperiod=1)
            #ma720rocp = talib.ROCP(ma720, timeperiod=1)
            self.feature.append(ma5rocp)
            self.feature.append(ma10rocp)
            self.feature.append(ma20rocp)
            self.feature.append(ma30rocp)
            self.feature.append(ma60rocp)
            self.feature.append(ma90rocp)
            self.feature.append(ma120rocp)
            self.feature.append(ma180rocp)
            #self.feature.append(ma360rocp)
            #self.feature.append(ma720rocp)
            self.feature.append((ma5 - close_prices) / close_prices)
            self.feature.append((ma10 - close_prices) / close_prices)
            self.feature.append((ma20 - close_prices) / close_prices)
            self.feature.append((ma30 - close_prices) / close_prices)
            self.feature.append((ma60 - close_prices) / close_prices)
            self.feature.append((ma90 - close_prices) / close_prices)
            self.feature.append((ma120 - close_prices) / close_prices)
            self.feature.append((ma180 - close_prices) / close_prices)
            #self.feature.append((ma360 - close_prices) / close_prices)
            #self.feature.append((ma720 - close_prices) / close_prices)
        if feature_type == 'STOCH':
            slow_stoch_k, slow_stoch_d = talib.STOCH(high_prices,
                                                     low_prices,
                                                     close_prices,
                                                     fastk_period=5,
                                                     slowk_period=3,
                                                     slowk_matype=0,
                                                     slowd_period=3,
                                                     slowd_matype=0)
            fast_stoch_k, fast_stoch_d = talib.STOCHF(high_prices,
                                                      low_prices,
                                                      close_prices,
                                                      fastk_period=5,
                                                      fastd_period=3,
                                                      fastd_matype=0)
            fast_rsi_k, fast_rsi_d = talib.STOCHRSI(close_prices,
                                                    timeperiod=14,
                                                    fastk_period=5,
                                                    fastd_period=3,
                                                    fastd_matype=0)
            self.feature.append(slow_stoch_k / 100.0 - 0.5)
            self.feature.append(slow_stoch_d / 100.0 - 0.5)
            self.feature.append(fast_stoch_k / 100.0 - 0.5)
            self.feature.append(fast_stoch_d / 100.0 - 0.5)
            self.feature.append(fast_rsi_k / 100.0 - 0.5)
            self.feature.append(fast_rsi_d / 100.0 - 0.5)
        if feature_type == 'AO':
            median_price = (high_prices + low_prices) / 2
            ao = talib.SMA(median_price, 5) - talib.SMA(median_price, 34)
            self.feature.append(ao)

        return self.feature