Esempio n. 1
0
    def find_rsi_top(cls, df):
        """
        从DataFrame的指定开始和结束位置查询平仓信号
        :param df:
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['rsi6'])

        # 查询做多信号为1的记录(创建副本)
        long_signal = df[df[lps.get_signal_key()] == 1].copy()

        # 避免两个做多信号相隔太近
        base_index = -1
        for item in long_signal.iterrows():
            if base_index == -1:
                base_index = item[0]
                continue
            curr_index = item[0]

            # n个K线内不产生交易信号
            if curr_index - base_index <= 5:
                long_signal.drop(labels=[curr_index], axis=0, inplace=True)
            else:
                base_index = curr_index

        # 遍历做多信号,逐个生成后续的平仓信号
        for item in long_signal.iterrows():
            index = item[0]
            cls.one_rsi_top(df, index)
Esempio n. 2
0
    def boll_upward_through(cls, df):
        """
        布林带上穿下轨
        :param df:
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['boll_upper'])

        boll_conf = (df['close'] > df['boll_upper']) & (df['close'].shift(1) < df['boll_upper'].shift(1))
        df.loc[boll_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 3
0
    def macd_upward_through(cls, df):
        """
        macd线上穿越0轴,由负变正
        :param df: 依赖值: dif, dea, macd_bar
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['dif', 'dea', 'macd_bar'])

        macd_conf  = (df['macd_bar'] > 0) & (df['macd_bar'].shift(1) < 0) & (df['dea'].shift(1) < 0)
        dif_conf   = (df['dif'] > df['dea']) & (df['dif'].shift(1) < df['dea'].shift(1))
        df.loc[macd_conf & dif_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 4
0
    def long_top_line(cls, df):
        """
        上影线
        :param df: 依赖值: macd_bar, ma60, close, rsi6
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['ma60', 'rsi6'])

        # 收盘价处于MA60均线上方
        close_conf = df['close'] > df['ma60']
        # rsi6 超卖
        rsi_conf = df['rsi6'] > cls._rsi_upper_limit
        df.loc[close_conf & rsi_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 5
0
    def lower_rsi_next(cls, df):
        """
        rsi低点
        :param df: 依赖值: rsi6, macd_bar
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['rsi6'])

        # 前一条rsi指标低于rsi_lower_limit,rsi6指标高于前一条rsi指标
        rsi_conf = (df['rsi6'].shift(1) < cls._rsi_lower_limit) & (df['rsi6'] > df['rsi6'].shift(1))
        # macd柱线
        # macd_conf = df['macd_bar'] > cls._min_macd_overlap

        # df.loc[rsi_conf & macd_conf, cls._signal_key] = cls._signal
        df.loc[rsi_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 6
0
    def macd_multi_bar(cls, df, before_number=3):
        """
        macd多柱线一致减弱后突然增强
        :param df: 依赖值: macd_bar, ma60, close
        :param before_number: 需要判断前面的n个柱线
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['macd_bar', 'ma60'])

        # macd柱线小于0,并且大于前面的柱线;收盘价小于MA60均线
        macd_conf = (df['macd_bar'] < 0) & (df['macd_bar'] > df['macd_bar'].shift(1)) & (df['close'] < df['ma60'])
        if before_number > 0:
            for index in range(before_number):
                # 判断前面的柱线
                macd_conf = macd_conf & (df['macd_bar'].shift(index + 1) < cls._macd_start_max)
        df.loc[macd_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 7
0
    def macd_multi_bar(cls, df, inc_num=3):
        """
        macd多柱线向上增强后减弱
        :param df: 依赖值: macd_bar
        :param inc_num:
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['macd_bar'])

        if inc_num <= 0:
            return False
        low_conf = df['macd_bar'] < df['macd_bar'].shift(1)
        inc_conf = False
        for index in range(inc_num):
            inc_conf = inc_conf & (df['macd_bar'].shift(index + 1) >
                                   df['macd_bar'].shift(index + 2))
        df.loc[low_conf & inc_conf, cls._signal_key] = cls._signal
        return True
Esempio n. 8
0
    def macd_overlap(cls, df):
        """
        dif、dea在接近0轴的下方粘合
        rsi小于下限值
        :param df: 依赖值: dif, dea, rsi6
        :return:
        """
        # 计算需要的指标
        BaseIndicator.rely_on_indicator(df, ['dif', 'dea', 'macd_bar'])

        # 判断dif、dea粘合
        dif_conf = (df['dif'] < cls._max_macd_overlap) & (df['dif'] > cls._min_macd_overlap)
        dea_conf = (df['dea'] < cls._max_macd_overlap) & (df['dea'] > cls._min_macd_overlap)
        # 判断rsi小于下限值
        rsi_conf = (df['rsi6'] < cls._rsi_lower_limit) | \
                   (df['rsi6'].shift(1) < cls._rsi_lower_limit) | \
                   (df['rsi6'].shift(2) < cls._rsi_lower_limit)
        df.loc[dif_conf & dea_conf & rsi_conf, cls._signal_key] = cls._signal
        return True