api = Binance('', '')

# 1m, 3m, 5m, 15m, 30m
# 1h, 2h, 4h, 6h, 8h
# 12h, 1d, 3d, 1w, 1M
period = '5m'
limit = 1000
base = 'BTCUSDT'
pairs = [
    'ETHUSDT', 'BNBUSDT', 'BCCUSDT', 'EOSUSDT', 'ADAUSDT', 'LTCUSDT',
    'NEOUSDT', 'XLMUSDT', 'XRPUSDT'
]

symb1 = pd.DataFrame(api.candlesticks(symbol=base,
                                      interval=period,
                                      limit=limit),
                     dtype=np.float)
x = symb1[4].values

for pair in pairs:
    try:
        print('{}\n{} vs {}:'.format(40 * '=', base, pair))
        symb2 = pd.DataFrame(api.candlesticks(symbol=pair,
                                              interval=period,
                                              limit=limit),
                             dtype=np.float)
        y = symb2[4].values

        fn = path + base + '-' + pair + '_' + period
        calculate_cointegration_scores(x,
Пример #2
0
symbols = ['BTCUSDT', 'ETHUSDT', 'BNBETH', 'BNBUSDT', 'BCCUSDT']
period = '1m'

limit = 20
ticks = 0
save_period = 1000
path = 'E:/Projects/market-analysis-system/data/crypto/'

data = dict(zip(symbols, [dict({'data':[]}) for i in symbols]))


while True:
    try:
        start_time = time.time()
        for symbol in symbols:
            candles = pd.DataFrame(api.candlesticks(symbol=symbol, interval=period, limit=limit), dtype=np.float)
            tickers = pd.DataFrame(api.tickers(symbol=symbol, limit=limit))
            trades = pd.DataFrame(api.aggr_trades(symbol=symbol, limit=limit), dtype=np.float)
            # data[symbol]['candles'] = np.column_stack((candles.values[:, 1:6], # o,h,l,c,v
            #                                                     candles.values[:, 7:11])) # qav, nt, bv, qv
            # data[symbol]['tickers'] = np.column_stack(([np.array([x[0:2] for x in tickers['bids'].values], dtype=np.float),
            #                                                     np.array([x[0:2] for x in tickers['asks'].values], dtype=np.float)]))
            # data[symbol]['trades'] = trades[['p', 'q']].values
            data[symbol]['data'] = np.append(data[symbol]['data'], np.column_stack((np.column_stack((candles.values[:, 1:6], # o,h,l,c,v
                                                                                                     candles.values[:, 7:11])), # qav, nt, bv, qv
                                                                                    np.column_stack(([np.array([x[0:2] for x in tickers['bids'].values], dtype=np.float),
                                                                                                      np.array([x[0:2] for x in tickers['asks'].values], dtype=np.float)])),
                                                                                    trades[['p', 'q']].values))).reshape(len(data[symbol]['data'])+1, limit*15)

        if ticks % save_period == 0:
            for symbol in symbols:
Пример #3
0
# labnotebook
model_desc = {'pair_1': symb1, 'pair_2': symb2,
              'period': period,
              symb1: balance[symb1], symb2: balance[symb2],
              'USD': balance['usd'], 'sum_balance': balance['sum'],
              'stop_size': stop_size}
experiment = labnotebook.start_experiment(model_desc=model_desc)

while True:
    try:
        sleep(30)
        # update coefficients
        if tick_count % 100000 == 0:
            x = pd.DataFrame(
                    api.candlesticks(symbol=symb1,
                            interval=period, limit=limit),
                    dtype=np.float)[4].values
            y = pd.DataFrame(
                    api.candlesticks(symbol=symb2,
                            interval=period, limit=limit),
                    dtype=np.float)[4].values
            eps, mu, std = calculate_cointegration_scores(x, y)

        # Update prices
        new_prices = {symb1: float(api.ticker_price(symbol=symb1)['price']),
                      symb2: float(api.ticker_price(symbol=symb2)['price'])}

        z_score = (new_prices[symb1] - eps * new_prices[symb2] - mu) / std
        past_z_score = (past_prices[symb1] - eps * past_prices[symb2] - mu) / std

        # Check stop levels