Exemple #1
0
def main():
    f = FeedHandler()
    f.add_feed(
        Bitmex(channels=[FUNDING, L3_BOOK],
               pairs=['XBTUSD'],
               callbacks={
                   FUNDING:
                   FundingInflux('http://localhost:8086', 'example'),
                   L3_BOOK:
                   BookInflux('http://localhost:8086', 'example', depth=10)
               }))
    f.add_feed(
        Coinbase(channels=[TRADES],
                 pairs=['BTC-USD'],
                 callbacks={
                     TRADES: TradeInflux('http://localhost:8086', 'example')
                 }))
    f.add_feed(
        Coinbase(channels=[L2_BOOK],
                 pairs=['BTC-USD'],
                 callbacks={
                     L2_BOOK:
                     BookInflux('http://localhost:8086', 'example', depth=10)
                 }))

    f.run()
Exemple #2
0
def main():

    f = FeedHandler()
    f.add_feed(
        Bitmex(channels=[FUNDING, L2_BOOK],
               symbols=['BTC-USD-PERP'],
               callbacks={
                   FUNDING: FundingInflux(INFLUX_ADDR, ORG, BUCKET, TOKEN),
                   L2_BOOK: BookInflux(INFLUX_ADDR, ORG, BUCKET, TOKEN)
               }))
    f.add_feed(
        Coinbase(
            channels=[TRADES],
            symbols=['BTC-USD'],
            callbacks={TRADES: TradeInflux(INFLUX_ADDR, ORG, BUCKET, TOKEN)}))
    f.add_feed(
        Coinbase(
            channels=[L2_BOOK],
            symbols=['BTC-USD'],
            callbacks={L2_BOOK: BookInflux(INFLUX_ADDR, ORG, BUCKET, TOKEN)}))
    f.add_feed(
        Coinbase(
            channels=[TICKER],
            symbols=['BTC-USD'],
            callbacks={TICKER: TickerInflux(INFLUX_ADDR, ORG, BUCKET, TOKEN)}))

    f.run()
def main():

    f = FeedHandler()
    f.add_feed(Bitmex(channels=[FUNDING, L2_BOOK], symbols=['BTC-USD'], callbacks={FUNDING: FundingInflux('http://localhost:8086', 'example', create_db=True), L2_BOOK: BookInflux('http://localhost:8086', 'example', create_db=True, numeric_type=float), BOOK_DELTA: BookDeltaInflux('http://localhost:8086', 'example', create_db=True, numeric_type=float)}))
    f.add_feed(Coinbase(channels=[TRADES], symbols=['BTC-USD'], callbacks={TRADES: TradeInflux('http://localhost:8086', 'example', create_db=True)}))
    f.add_feed(Coinbase(channels=[L2_BOOK], symbols=['BTC-USD'], callbacks={L2_BOOK: BookInflux('http://localhost:8086', 'example', create_db=True, numeric_type=float), BOOK_DELTA: BookDeltaInflux('http://localhost:8086', 'example', create_db=True, numeric_type=float)}))
    f.add_feed(Coinbase(channels=[TICKER], symbols=['BTC-USD'], callbacks={TICKER: TickerInflux('http://localhost:8086', 'example', create_db=True, numeric_type=float)}))

    """
    # Uncomment Here When Using InfluxDB 2.0
    # For InfluxDB 2.0, provide additional org, bucket(instead of db), token and precision(optional)
    # [Note] In order to use visualization and aggregation, numeric_type with float is strongly recommended.

    ADDR = 'https://localhost:9999'
    ORG='my-org'
    BUCKET = 'my-bucket'
    TOKEN = 'token-something-like-end-with-=='

    f = FeedHandler()
    funding_influx = FundingInflux(ADDR, org=ORG, bucket=BUCKET, token=TOKEN, numeric_type=float)
    trade_influx = TradeInflux(ADDR, org=ORG, bucket=BUCKET, token=TOKEN, numeric_type=float)
    book_influx = BookInflux(ADDR, org=ORG, bucket=BUCKET, token=TOKEN, numeric_type=float)
    bookdelta_influx = BookDeltaInflux(ADDR, org=ORG, bucket=BUCKET, token=TOKEN, numeric_type=float)
    ticker_influx = TickerInflux(ADDR, org=ORG, bucket=BUCKET, token=TOKEN, numeric_type=float)

    f.add_feed(Bitmex(channels=[FUNDING, L2_BOOK],symbols=['BTC-USD'], callbacks={FUNDING: funding_influx, L2_BOOK: book_influx, BOOK_DELTA: bookdelta_influx}))
    f.add_feed(Coinbase(channels=[TRADES], symbols=['BTC-USD'], callbacks={TRADES: trade_influx}))
    f.add_feed(Coinbase(channels=[L2_BOOK], symbols=['BTC-USD'], callbacks={L2_BOOK: book_influx, BOOK_DELTA: bookdelta_influx}))
    f.add_feed(Coinbase(channels=[TICKER], symbols=['BTC-USD'], callbacks={TICKER: ticker_influx}))
    """

    f.run()
Exemple #4
0
def main():
    f = FeedHandler()
    f.add_feed(
        Bitmex(channels=[FUNDING, L2_BOOK],
               pairs=['XBTUSD'],
               callbacks={
                   FUNDING:
                   FundingInflux('http://localhost:8086', 'example'),
                   L2_BOOK:
                   BookInflux('http://localhost:8086',
                              'example',
                              numeric_type=float),
                   BOOK_DELTA:
                   BookDeltaInflux('http://localhost:8086',
                                   'example',
                                   numeric_type=float)
               }))
    f.add_feed(
        Coinbase(channels=[TRADES],
                 pairs=['BTC-USD'],
                 callbacks={
                     TRADES: TradeInflux('http://localhost:8086', 'example')
                 }))
    f.add_feed(
        Coinbase(channels=[L2_BOOK],
                 pairs=['BTC-USD'],
                 callbacks={
                     L2_BOOK:
                     BookInflux('http://localhost:8086',
                                'example',
                                numeric_type=float),
                     BOOK_DELTA:
                     BookDeltaInflux('http://localhost:8086',
                                     'example',
                                     numeric_type=float)
                 }))
    f.add_feed(
        Coinbase(channels=[TICKER],
                 pairs=['BTC-USD'],
                 callbacks={
                     TICKER:
                     TickerInflux('http://localhost:8086',
                                  'example',
                                  numeric_type=float)
                 }))

    f.run()
Exemple #5
0
def load_config() -> Feed:
    exchange = os.environ.get('EXCHANGE')
    symbols = os.environ.get('SYMBOLS')

    if symbols is None:
        raise ValueError("Symbols must be specified")
    symbols = symbols.split(",")

    channels = os.environ.get('CHANNELS')
    if channels is None:
        raise ValueError("Channels must be specified")
    channels = channels.split(",")

    config = os.environ.get('CONFIG')
    backend = os.environ.get('BACKEND')
    snap_only = os.environ.get('SNAPSHOT_ONLY', False)
    if snap_only:
        if snap_only.lower().startswith('f'):
            snap_only = False
        elif snap_only.lower().startswith('t'):
            snap_only = True
        else:
            raise ValueError('Invalid value specified for SNAPSHOT_ONLY')
    snap_interval = os.environ.get('SNAPSHOT_INTERVAL', 1000)
    snap_interval = int(snap_interval)
    host = os.environ.get('HOST', '127.0.0.1')
    port = os.environ.get('PORT')
    if port:
        port = int(port)
    candle_interval = os.environ.get('CANDLE_INTERVAL', '1m')
    database = os.environ.get('DATABASE')
    user = os.environ.get('USER')
    password = os.environ.get('PASSWORD')
    org = os.environ.get('ORG')
    bucket = os.environ.get('BUCKET')
    token = os.environ.get('TOKEN')

    cbs = None
    if backend == 'REDIS' or backend == 'REDISSTREAM':
        kwargs = {'host': host, 'port': port if port else 6379}
        cbs = {
            L2_BOOK:
            BookRedis(snapshot_interval=snap_interval,
                      snapshots_only=snap_only,
                      **kwargs) if backend == 'REDIS' else BookStream(
                          snapshot_interval=snap_interval,
                          snapshots_only=snap_only,
                          **kwargs),
            TRADES:
            TradeRedis(**kwargs) if backend == 'REDIS' else TradeStream(
                **kwargs),
            TICKER:
            TickerRedis(**kwargs) if backend == 'REDIS' else TickerStream(
                **kwargs),
            FUNDING:
            FundingRedis(**kwargs) if backend == 'REDIS' else FundingStream(
                **kwargs),
            CANDLES:
            CandlesRedis(**kwargs) if backend == 'REDIS' else CandlesStream(
                **kwargs),
            OPEN_INTEREST:
            OpenInterestRedis(**kwargs)
            if backend == 'REDIS' else OpenInterestStream(**kwargs),
            LIQUIDATIONS:
            LiquidationsRedis(**kwargs)
            if backend == 'REDIS' else LiquidationsStream(**kwargs)
        }
    elif backend == 'MONGO':
        kwargs = {'host': host, 'port': port if port else 27101}
        cbs = {
            L2_BOOK:
            BookMongo(database,
                      snapshot_interval=snap_interval,
                      snapshots_only=snap_only,
                      **kwargs),
            TRADES:
            TradeMongo(database, **kwargs),
            TICKER:
            TickerMongo(database, **kwargs),
            FUNDING:
            FundingMongo(database, **kwargs),
            CANDLES:
            CandlesMongo(database, **kwargs),
            OPEN_INTEREST:
            OpenInterestMongo(database, **kwargs),
            LIQUIDATIONS:
            LiquidationsMongo(database, **kwargs)
        }
    elif backend == 'POSTGRES':
        kwargs = {
            'db': database,
            'host': host,
            'port': port if port else 5432,
            'user': user,
            'pw': password
        }
        cbs = {
            L2_BOOK:
            BookPostgres(snapshot_interval=snap_interval,
                         snapshots_only=snap_only,
                         **kwargs),
            TRADES:
            TradePostgres(**kwargs),
            TICKER:
            TickerPostgres(**kwargs),
            FUNDING:
            FundingPostgres(**kwargs),
            CANDLES:
            CandlesPostgres(**kwargs),
            OPEN_INTEREST:
            OpenInterestPostgres(**kwargs),
            LIQUIDATIONS:
            LiquidationsPostgres(**kwargs)
        }
    elif backend in ('TCP', 'UDP', 'UDS'):
        kwargs = {'port': port}
        cbs = {
            L2_BOOK:
            BookSocket(host,
                       snapshot_interval=snap_interval,
                       snapshots_only=snap_only,
                       **kwargs),
            TRADES:
            TradeSocket(host, **kwargs),
            TICKER:
            TickerSocket(host, **kwargs),
            FUNDING:
            FundingSocket(host, **kwargs),
            CANDLES:
            CandlesSocket(host, **kwargs),
            OPEN_INTEREST:
            OpenInterestSocket(host, **kwargs),
            LIQUIDATIONS:
            LiquidationsSocket(host, **kwargs)
        }
    elif backend == 'INFLUX':
        args = (host, org, bucket, token)
        cbs = {
            L2_BOOK:
            BookInflux(*args,
                       snapshot_interval=snap_interval,
                       snapshots_only=snap_only),
            TRADES:
            TradeInflux(*args),
            TICKER:
            TickerInflux(*args),
            FUNDING:
            FundingInflux(*args),
            CANDLES:
            CandlesInflux(*args),
            OPEN_INTEREST:
            OpenInterestInflux(*args),
            LIQUIDATIONS:
            LiquidationsInflux(*args)
        }
    elif backend == 'QUEST':
        kwargs = {'host': host, 'port': port if port else 9009}
        cbs = {
            L2_BOOK: BookQuest(**kwargs),
            TRADES: TradeQuest(**kwargs),
            TICKER: TickerQuest(**kwargs),
            FUNDING: FundingQuest(**kwargs),
            CANDLES: CandlesQuest(**kwargs),
            OPEN_INTEREST: OpenInterestQuest(**kwargs),
            LIQUIDATIONS: LiquidationsQuest(**kwargs)
        }
    elif backend == 'TTY':
        cbs = {
            L2_BOOK: tty,
            TRADES: tty,
            TICKER: tty,
            FUNDING: tty,
            CANDLES: tty,
            OPEN_INTEREST: tty,
            LIQUIDATIONS: tty
        }
    else:
        raise ValueError('Invalid backend specified')

    # Prune unused callbacks
    remove = [chan for chan in cbs if chan not in channels]
    for r in remove:
        del cbs[r]

    return EXCHANGE_MAP[exchange](candle_intterval=candle_interval,
                                  symbols=symbols,
                                  channels=channels,
                                  config=config,
                                  callbacks=cbs)