Example #1
0
def calculate_boillinger_bands(length, period, date_reference, coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        closes = db.session.query(Ticker).\
            filter(and_(Ticker.date <= date_reference, Ticker.coin==c, Ticker.period==period)).\
            order_by(Ticker.date.desc()).limit(length).all()

        close = [v.close for v in closes][::-1]
        df = pd.DataFrame(close, columns=['close'])
        upper, middle, lower = tb.BBANDS(df.close,
                                         timeperiod=5,
                                         nbdevup=2,
                                         nbdevdn=2,
                                         matype=0)

        try:
            upper_band_value = TechnicalIndicator(date_reference, period, c,
                                                  'BBUpper', upper.iloc[-1])
            db.session.add(upper_band_value)
            lower_band_value = TechnicalIndicator(date_reference, period, c,
                                                  'BBLower', lower.iloc[-1])
            db.session.add(lower_band_value)
            middle_band_value = TechnicalIndicator(date_reference, period, c,
                                                   'BBMiddle', middle.iloc[-1])
            db.session.add(middle_band_value)
            db.session.commit()
        except Exception:
            db.session.rollback()
            print('Already has value BBands for: ' + str(date_reference) +
                  ' ' + str(length) + ' ' + str(c))
Example #2
0
def calculate_atr(period, date_reference, length, coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        closes = db.session.query(Ticker). \
            filter(and_(Ticker.date <= date_reference, Ticker.coin == c, Ticker.period == period)). \
            order_by(Ticker.date.desc()).all()

        high = [v.high for v in closes][::-1]
        low = [v.low for v in closes][::-1]
        close = [v.close for v in closes][::-1]

        df = pd.DataFrame(columns=['close', 'high', 'low'])
        df['close'] = close
        df['high'] = high
        df['low'] = low

        atr = tb.ATR(df.high, df.low, df.close, timeperiod=length)

        try:
            atr_entity = TechnicalIndicator(date_reference, period, c, 'ATR',
                                            atr.iloc[-1])
            db.session.add(atr_entity)
            db.session.commit()

        except Exception:
            db.session.rollback()
            print('Already has value ATR ' + str(date_reference))
Example #3
0
def calculate_macd(period,
                   date_reference,
                   length_short,
                   length_long,
                   length_macd,
                   coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        closes = db.session.query(Ticker). \
            filter(and_(Ticker.date <= date_reference, Ticker.coin == c, Ticker.period == period)). \
            order_by(Ticker.date.desc()).all()

        close = [v.close for v in closes][::-1]
        df = pd.DataFrame(close, columns=['close'])
        macd, macdsignal, macdhist = tb.MACD(df.close,
                                             fastperiod=length_short,
                                             slowperiod=length_long,
                                             signalperiod=length_macd)

        try:
            macd_line_entity = TechnicalIndicator(date_reference, period, c,
                                                  'MACD', macd.iloc[-1])
            db.session.add(macd_line_entity)

            signal_line_entity = TechnicalIndicator(date_reference, period, c,
                                                    'SIGNAL',
                                                    macdsignal.iloc[-1])
            db.session.add(signal_line_entity)

            histogram_entity = TechnicalIndicator(date_reference, period, c,
                                                  'HISTOGRAM',
                                                  macdhist.iloc[-1])
            db.session.add(histogram_entity)

            db.session.commit()

        except Exception:
            db.session.rollback()
            print('Already has value MACDS ' + str(date_reference))
Example #4
0
def calculate_sum_google_trends(period, date_reference, length, coins=None):
    date_window = date_reference - period * length
    if not coins:
        coins = all_tickers
    for c in coins:
        google_trends = db.session.query(GoogleTrends). \
            filter(and_(GoogleTrends.date <= date_reference,
                        GoogleTrends.date > date_window,
                        or_(GoogleTrends.coin == c[5:], GoogleTrends.coin == 'crypto'))). \
            order_by(GoogleTrends.date.desc()).all()

        coin_trend = [v.value for v in google_trends if ('USDT_' + v.coin) == c][::-1]
        market_trend = [v.value for v in google_trends if v.coin == 'crypto'][::-1]
        try:
            trends_entity = TechnicalIndicator(date_reference, period, c, 'TREND_COIN',  np.sum(coin_trend) + np.sum(market_trend))
            db.session.add(trends_entity)
            db.session.commit()

        except Exception:
            db.session.rollback()
            print('Already has value GoogleTrends ' + str(date_reference))
Example #5
0
def calculate_momentum(period, date_reference, length, coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        closes = db.session.query(Ticker). \
            filter(and_(Ticker.date <= date_reference, Ticker.coin == c, Ticker.period == period)). \
            order_by(Ticker.date.desc()).all()

        close = [v.close for v in closes][::-1]
        df = pd.DataFrame(close, columns=['close'])
        momentum = tb.MOM(df.close, timeperiod=length)

        try:
            momentum_entity = TechnicalIndicator(date_reference, period, c,
                                                 'MOMENTUM', momentum.iloc[-1])
            db.session.add(momentum_entity)
            db.session.commit()

        except Exception:
            db.session.rollback()
            print('Already has value MOMENTUM ' + str(date_reference))
Example #6
0
def calculate_rsi(length, period, date_reference, coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        values = db.session.query(Ticker). \
            filter(and_(Ticker.date <= date_reference, Ticker.coin == c, Ticker.period == period)). \
            order_by(Ticker.date.desc()).all()

        close = [v.close for v in values][::-1]
        df = pd.DataFrame(columns=['close'])
        df['close'] = close
        rsi_value = tb.RSI(df.close, timeperiod=14)
        try:
            rsi_entity = TechnicalIndicator(date_reference, period, c,
                                            'RSI' + str(length),
                                            rsi_value.iloc[-1])
            db.session.add(rsi_entity)
            db.session.commit()
        except Exception:
            db.session.rollback()
            print('Already has value RSI ' + str(date_reference) + ' ' + c +
                  ' ' + str(length) + ' ' + str(rsi_value.iloc[-1]))
Example #7
0
def calculate_ma(length, period, date_reference, coins=None, _type='SMA'):
    if not coins:
        coins = all_tickers
    for c in coins:
        closes = db.session.query(Ticker).\
            filter(and_(Ticker.date <= date_reference, Ticker.coin==c, Ticker.period==period)).\
            order_by(Ticker.date.desc()).limit(length).all()

        close = [v.close for v in closes][::-1]
        df = pd.DataFrame(close, columns=['close'])
        if _type == 'SMA':
            ma = tb.MA(df.close, timeperiod=length)

        elif _type == 'EMA':
            ma = tb.EMA(df.close, timeperiod=length)
        try:
            ma_value = TechnicalIndicator(date_reference, period, c,
                                          _type + str(length), ma.iloc[-1])
            db.session.add(ma_value)
            db.session.commit()
        except Exception:
            db.session.rollback()
            print('Already has value ' + _type + ' ' + str(date_reference) +
                  ' ' + str(length) + ' ' + str(ma.iloc[-1]))
Example #8
0
def calculate_obv(period, date_reference, coins=None):
    if not coins:
        coins = all_tickers
    for c in coins:
        values = db.session.query(Ticker). \
            filter(and_(Ticker.date <= date_reference, Ticker.coin == c, Ticker.period == period)). \
            order_by(Ticker.date.desc()).all()

        close = [v.close for v in values][::-1]
        volume = [v.volume for v in values][::-1]

        df = pd.DataFrame(columns=['close', 'volume'])
        df['close'] = close
        df['volume'] = volume
        real = tb.OBV(df.close, df.volume)
        try:
            obv_entity = TechnicalIndicator(date_reference, period, c, 'OBV', real.iloc[-1])
            db.session.add(obv_entity)
            db.session.commit()

        except Exception:
            db.session.rollback()
            print('Already has value OBV ' + str(date_reference))
        return