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,
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:
# 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