예제 #1
0
 def alpha_20(self):
     """
     formula: (((-1 * rank((open - delay(high, 1)))) *
     rank((open - delay(close, 1)))) *
     rank((open -delay(low, 1))))
     """
     return -1 * (_utils.rank(self.open - _utils.delay(self.high, 1)) *
                  _utils.rank(self.open - _utils.delay(self.close, 1)) *
                  _utils.rank(self.open - _utils.delay(self.low, 1))
                  ).fillna(method='backfill')
예제 #2
0
 def alpha_30(self):
     """
     formula: (((1.0 - rank(((sign((close - delay(close, 1))) + sign((delay(close, 1) - delay(close, 2)))) +
      sign((delay(close, 2) - delay(close, 3))))))* sum(volume, 5)) / sum(volume, 20))
     """
     delta_close = _utils.delta(self.close, 1)  # (close - delay(close, 1)
     inner = np.sign(delta_close) + np.sign(_utils.delay(
         delta_close, 1)) + np.sign(_utils.delay(delta_close, 2))
     df = (1.0 - _utils.rank(inner)) * _utils.ts_sum(
         self.volume, 5) / _utils.ts_sum(self.volume, 20)
     return df.fillna(method='backfill')
예제 #3
0
 def alpha_49(self):
     """
     formula: (((((delay(close, 20) - delay(close, 10)) / 10) - ((delay(close, 10) - close) / 10)) < (-1 *0.05)) ?
      1 : ((-1 * 1) * (close - delay(close, 1))))
     :return:
     """
     inner = ((
         (_utils.delay(self.close, 20) - _utils.delay(self.close, 10)) / 10)
              - ((_utils.delay(self.close, 10) - self.close) / 10))
     alpha = (-1 * _utils.delta(self.close))
     alpha[inner < -0.05] = 1
     return alpha
예제 #4
0
 def alpha_45(self):
     """
     formula: (0.25 < (((delay(close, 20) - delay(close, 10)) / 10) - ((delay(close, 10) - close) / 10))) ?
     (-1 * 1) : (((((delay(close, 20) - delay(close, 10)) / 10) - ((delay(close, 10) - close) / 10)) < 0) ?
     1 :((-1 * 1) * (close - delay(close, 1)))))
     :return dataframe, inner has lot of nan
     """
     inner = ((_utils.delay(self.close, 20) - _utils.delay(self.close, 10)) / 10) - \
             ((_utils.delay(self.close, 10) - self.close) / 10)
     alpha = (-1 * _utils.delta(self.close))
     alpha[inner < 0] = 1
     alpha[inner > 0.25] = -1
     return alpha
예제 #5
0
 def alpha_19(self):
     """
     formula: ((-1 * sign(((close - delay(close, 7)) + delta(close, 7)))) * (1 + rank((1 + sum(returns,250)))))
     be careful with the time range, less than 250 will be nan
     """
     return ((-1 * np.sign((self.close - _utils.delay(self.close, 7)) +
                           _utils.delta(self.close, 7))) *
             (1 + _utils.rank(1 + _utils.ts_sum(self.returns, 250))))
예제 #6
0
 def alpha_36(self):
     """
     formula: (rank(correlation(delay((open - close), 1), close, 200)) + rank((open - close)))
     :return:dataframe, need long range
     """
     return (_utils.rank(
         _utils.correlation(_utils.delay(self.open - self.close, 1),
                            self.close, 200)) +
             _utils.rank(self.open - self.close)).fillna(method='backfill')
예제 #7
0
 def alpha_32(self):
     """
     formula: (scale(((sum(close, 7) / 7) - close)) + (20* scale(correlation(vwap, delay(close, 5), 230))))
     long time series
     :return:
     """
     return _utils.scale(
         ((_utils.ts_ma(self.close, 7) / 7) - self.close)
     ) + (20 * _utils.scale(
         _utils.correlation(self.vwap, _utils.delay(self.close, 5), 230)))
예제 #8
0
 def alpha_8(self):
     """
     formula: (-1*rank(((sum(open, 5)*sum(returns, 5)) - delay((sum(open, 5)*sum(returns, 5)), 10))))
     """
     df = -1 * _utils.rank(
         _utils.ts_sum(self.open, window=5) *
         _utils.ts_sum(self.returns, window=5) -
         _utils.delay(_utils.ts_sum(self.open, window=5) *
                      _utils.ts_sum(self.returns, window=5),
                      period=10))
     return df.fillna(method='backfill')
예제 #9
0
 def alpha_24(self):
     """
     formula: ((((delta((sum(close, 100) / 100), 100) / delay(close, 100)) < 0.05) or
     ((delta((sum(close, 100) / 100), 100) / delay(close, 100)) == 0.05)) ?
     (-1* (close - ts_min(close, 100))) : (-1* delta(close, 3)))
     """
     condition = _utils.delta(_utils.ts_ma(self.close, 100),
                              100) / _utils.delay(self.close, 100) <= 0.05
     alpha = -1 * _utils.delta(self.close, 3)
     alpha[condition] = -1 * (self.close - _utils.ts_min(self.close, 100))
     return alpha
예제 #10
0
 def alpha_46(self):
     """
     formula: ((((rank((1 / close)) * volume) / adv20) * ((high * rank((high - close)))
     / (sum(high, 5) /5))) - rank((vwap - delay(vwap, 5))))
     :return:
     """
     adv20 = _utils.ts_ma(self.volume, 20)
     df = ((((_utils.rank((1 / self.close)) * self.volume) / adv20) *
            ((self.high * _utils.rank((self.high - self.close))) /
             (_utils.ts_ma(self.high, 5) / 5))) - _utils.rank(
                 (self.vwap - _utils.delay(self.vwap, 5))))
     return df.fillna(method='backfill')
예제 #11
0
 def alpha_44(self):
     """
     formula: (-1 * ((rank((sum(delay(close, 5), 20) / 20)) * correlation(close, volume, 2))
     *rank(correlation(sum(close, 5), sum(close, 20), 2))))
     :return: dataframe, need more stock and long range
     """
     df = _utils.correlation(self.close, self.volume, 2)
     df = df.replace([-np.inf, np.inf], 0).fillna(value=0)
     df = -1 * (_utils.rank(_utils.ts_ma(_utils.delay(self.close, 5), 20)) *
                df * _utils.rank(
                    _utils.correlation(_utils.ts_sum(self.close, 5),
                                       _utils.ts_sum(self.close, 20), 2)))
     return df.fillna(method='backfill')
예제 #12
0
 def alpha_29(self):
     """
     formula: (min(product(rank(rank(scale(log(sum(ts_min(rank(
     rank((-1*rank(delta((close - 1), 5))))), 2), 1))))), 1), 5) +
      ts_rank(delay((-1* returns), 6), 5))
     """
     df = _utils.ts_min(
         _utils.rank(
             _utils.rank(
                 _utils.scale(
                     np.log(
                         _utils.ts_sum(
                             _utils.rank(
                                 _utils.rank(-1 * _utils.rank(
                                     _utils.delta(self.close - 1, 5)))),
                             2))))), 5) + _utils.ts_rank(
                                 _utils.delay(-1 * self.returns, 6), 5)
     return df.fillna(method='backfill')