def __init__(self, symbol, quantity):
        self.client = Client(API_KEY, API_SECRET)

        self.QUANTITY = float(quantity)
        self.LIM = 0.0015
        self.WINDOW = 1
        self.LENGTH = 5
        self.LAST_INDICATOR = -1
        self.MEAN_SPREAD = deque([], self.LENGTH)
        self.AUX_FUT = []
        self.AUX_SPOT = []
        self.SIGNAL_SELL = False
        self.SIGNAL_BUY = False
        self.POS = 0
        self.I = 0
        self.SYMBOL = symbol
        self.column_names = [
            'open_time', 'open', 'high', 'low', 'close', 'volume',
            'close_time', 'quote_asset_volume', 'number_of_trades',
            'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
            'ignore'
        ]

        self.client.futures_change_leverage(symbol=self.SYMBOL, leverage=20)
        self._historical_data()
Example #2
0
def get_spot_balance(Client, coin = 'USDT'):
    coins = Client.get_all_coins_info()
    usdt_spot_total = 0.0
    for a_coin in coins:
        if a_coin['coin'] == coin:
            usdt_spot_total = xfloat(a_coin['free']) + xfloat(a_coin['locked'])
    return usdt_spot_total
Example #3
0
    def __init__(self):
        self.client = Client(API_KEY, API_SECRET)

        self.QUANTITY = 0.005
        self.LIM = 0.0003
        self.WINDOW = 100
        self.LENGTH = 3000
        self.LAST_INDICATOR = -1
        self.VECTOR = deque([], self.LENGTH)
        self.MEAN_SPREAD = deque([], self.LENGTH)
        self.AUX = []
        self.AUX_SPREAD = []
        self.SIGNAL_SELL = False
        self.SIGNAL_BUY = False
        self.value_spot = 56100
        self.value_future = 56100
        self.POS = 0
        self.SYMBOL = 'BTCUSDT'
        self.client.futures_change_leverage(symbol=self.SYMBOL, leverage=10)
Example #4
0
class ApiConnection:
    def __init__(self):
        self.client = Client(API_KEY, API_SECRET)

        self.QUANTITY = 0.005
        self.LIM = 0.0003
        self.WINDOW = 100
        self.LENGTH = 3000
        self.LAST_INDICATOR = -1
        self.VECTOR = deque([], self.LENGTH)
        self.MEAN_SPREAD = deque([], self.LENGTH)
        self.AUX = []
        self.AUX_SPREAD = []
        self.SIGNAL_SELL = False
        self.SIGNAL_BUY = False
        self.value_spot = 56100
        self.value_future = 56100
        self.POS = 0
        self.SYMBOL = 'BTCUSDT'
        self.client.futures_change_leverage(symbol=self.SYMBOL, leverage=10)

    def open_web_socket(self):
        self.bsm = BinanceSocketManager(self.client)
        self.conn_key_spot = self.bsm.start_multiplex_socket(
            ['btcusdt@bookTicker'], self._data_from_spot)
        self.bsm.start()

    def open_web_socket_futures(self):
        self.bsm_ = BinanceSocketManager(self.client)
        self.conn_key_fut = self.bsm_.start_multiplex_socket_futures(
            ['btcusdt@bookTicker'], self._data_from_futures)
        self.bsm_.start()

    def _data_from_futures(self, msg):
        self.ask = float(msg['data']['a'])
        self.bid = float(msg['data']['b'])
        self.value_future = (self.ask + self.bid) / 2.0

        if len(self.VECTOR) < self.LENGTH:
            self.VECTOR.append(self.value_future)
            self.MEAN_SPREAD.append(self.value_future / self.value_spot)
            if len(self.MEAN_SPREAD) == 2998:
                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()
        else:
            self._strategy()
            self.AUX_SPREAD.append(self.value_future / self.value_spot)
            self.AUX.append(self.value_future)
            if len(self.AUX) == self.WINDOW:
                self.VECTOR.extend(self.AUX)
                self.MEAN_SPREAD.extend(self.AUX_SPREAD)

                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()

                self.AUX = []
                self.AUX_SPREAD = []
            #self._strategy()

    def _data_from_spot(self, msg):
        self.value_spot = (float(msg['data']['b']) +
                           float(msg['data']['a'])) / 2.0

        if len(self.VECTOR) < self.LENGTH:
            self.VECTOR.append(self.value_spot)
            self.MEAN_SPREAD.append(self.value_future / self.value_spot)
            if len(self.MEAN_SPREAD) == 2998:
                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()
        else:
            self._strategy()
            self.AUX_SPREAD.append(self.value_future / self.value_spot)
            self.AUX.append(self.value_spot)
            if len(self.AUX) == self.WINDOW:
                self.VECTOR.extend(self.AUX)
                self.MEAN_SPREAD.extend(self.AUX_SPREAD)

                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()

                self.AUX = []
                self.AUX_SPREAD = []
            #self._strategy()

    def _permutation_entropy(self):
        return permutation_entropy(self.MEAN_SPREAD, order=5, delay=1)

    def _strategy(self):
        INDICATOR = (self.value_future / self.value_spot -
                     self.mean) / self.permutation

        if INDICATOR > self.LIM:
            self.LAST_INDICATOR = 1
            self.SIGNAL_SELL = True

        elif INDICATOR < -self.LIM:
            self.LAST_INDICATOR = 0
            self.SIGNAL_BUY = True

        if (INDICATOR > -0.000065) and (INDICATOR < 0.000065):
            if self.LAST_INDICATOR == 1:
                self.LAST_INDICATOR = -1
                self.SIGNAL_BUY = True
                self.SIGNAL_SELL = False

            elif self.LAST_INDICATOR == 0:
                self.LAST_INDICATOR = -1
                self.SIGNAL_SELL = True
                self.SIGNAL_BUY = False

        self._operational()
        sys.stdout.write(f'\r {INDICATOR}')
        sys.stdout.flush()

    def _operational(self):

        if self.POS <= 0:
            if self.SIGNAL_BUY == True:
                #              self.POS += 1
                self._place_orders('BUY', 'SELL')
                self.POS += 1
                print('BUY - BTCUSDTF -- price {} -- '.format(self.ask))
                self.SIGNAL_BUY = False

        if self.POS >= 0:
            if self.SIGNAL_SELL == True:
                # self.POS -= 1
                self._place_orders('SELL', 'BUY')
                self.POS -= 1
                print('SELL - BTCUSDTF -- price {} -- '.format(self.bid))
                self.SIGNAL_SELL = False

    def _place_orders(self, first, second):

        self.client.futures_create_order(side=first,
                                         quantity=self.QUANTITY,
                                         symbol=self.SYMBOL,
                                         type='MARKET')
Example #5
0
def stop_account(bots, account_id, api_key, api_secret):
    #account=getBinanceAPI(api_key, api_secret).futuresAccount()
    BinanceClient = Client(api_key, api_secret)
    account = BinanceClient.futures_account()

    stop_all_bots(bots, account_id, args.dry)
class ApiConnection:
    def __init__(self, symbol, quantity):
        self.client = Client(API_KEY, API_SECRET)

        self.QUANTITY = float(quantity)
        self.LIM = 0.0015
        self.WINDOW = 1
        self.LENGTH = 5
        self.LAST_INDICATOR = -1
        self.MEAN_SPREAD = deque([], self.LENGTH)
        self.AUX_FUT = []
        self.AUX_SPOT = []
        self.SIGNAL_SELL = False
        self.SIGNAL_BUY = False
        self.POS = 0
        self.I = 0
        self.SYMBOL = symbol
        self.column_names = [
            'open_time', 'open', 'high', 'low', 'close', 'volume',
            'close_time', 'quote_asset_volume', 'number_of_trades',
            'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume',
            'ignore'
        ]

        self.client.futures_change_leverage(symbol=self.SYMBOL, leverage=20)
        self._historical_data()

    def open_web_socket(self):
        self.bsm = BinanceSocketManager(self.client)
        self.conn_key_spot = self.bsm.start_kline_socket(
            self.SYMBOL, self._data_from_spot)
        self.bsm.start()

    def open_web_socket_futures(self):
        self.bsm_ = BinanceSocketManager(self.client)
        self.conn_key_fut = self.bsm_.start_futures_kline_socket(
            self.SYMBOL, self._data_from_futures)
        self.bsm_.start()

    def _historical_data(self):
        df_spot = pd.DataFrame(self.client.get_historical_klines(
            self.SYMBOL, '1m', "6 min ago UTC"),
                               columns=self.column_names)
        df_spot = df_spot[:5]
        df_spot['close'] = pd.to_numeric(df_spot['close'])

        df_futures = pd.DataFrame(self.client.futures_klines(
            symbol=self.SYMBOL, interval='1m', limit=6),
                                  columns=self.column_names)
        df_futures = df_futures[:5]
        df_futures['close'] = pd.to_numeric(df_futures['close'])
        df_futures['close_spot'] = df_spot['close']
        df_futures['spread'] = df_futures['close'] / df_futures['close_spot']
        self.MEAN_SPREAD.extend(df_futures['spread'].values)
        time.sleep(5)

    def _data_from_futures(self, msg):
        if msg['data']['k']['x']:
            self.close_futures = float(msg['data']['k']['c'])
            self.AUX_FUT.append(self.close_futures)
            if len(self.AUX_FUT) == len(self.AUX_SPOT):
                self.MEAN_SPREAD.append(self.AUX_FUT[-1] / self.AUX_SPOT[-1])
                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()
                self._strategy()


#         else:
#             if self.POS != 0:
#                 if len(self.client.futures_get_open_orders(symbol = self.SYMBOL)) == 1:
#                     self.POS = 0
#                     self.client.futures_cancel_all_open_orders(symbol=self.SYMBOL)

    def _data_from_spot(self, msg):
        self.I += 1
        if msg['k']['x']:
            self.close_spot = float(msg['k']['c'])
            self.AUX_SPOT.append(self.close_spot)
            if len(self.AUX_FUT) == len(self.AUX_SPOT):
                self.MEAN_SPREAD.append(self.AUX_FUT[-1] / self.AUX_SPOT[-1])
                self.mean = np.mean(self.MEAN_SPREAD)
                self.permutation = self._permutation_entropy()
                self._strategy()
        else:
            if self.POS != 0:
                if self.I % 100 == 0:
                    if len(
                            self.client.futures_get_open_orders(
                                symbol=self.SYMBOL)) == 1:
                        self.I = 0
                        self.POS = 0
                        self.client.futures_cancel_all_open_orders(
                            symbol=self.SYMBOL)

    def _permutation_entropy(self):
        return permutation_entropy(self.MEAN_SPREAD, order=3, delay=1)

    def _strategy(self):
        if self.permutation == 0:
            INDICATOR = (self.close_futures / self.close_spot - self.mean)
        else:
            INDICATOR = (self.close_futures / self.close_spot -
                         self.mean) / self.permutation

        if INDICATOR > self.LIM:
            self.LAST_INDICATOR = 1
            self.SIGNAL_SELL = True

        elif INDICATOR < -self.LIM:
            self.LAST_INDICATOR = 0
            self.SIGNAL_BUY = True

        if (INDICATOR > -self.LIM) and (INDICATOR < self.LIM):
            if self.LAST_INDICATOR == 1:
                self.LAST_INDICATOR = -1
                self.SIGNAL_BUY = True
                self.SIGNAL_SELL = False

            elif self.LAST_INDICATOR == 0:
                self.LAST_INDICATOR = -1
                self.SIGNAL_SELL = True
                self.SIGNAL_BUY = False

        self._operational()
        sys.stdout.write(f'\r {INDICATOR}')
        sys.stdout.flush()

    def _operational(self):

        if self.POS <= 0:
            if self.SIGNAL_BUY == True:
                #              self.POS += 1
                self._place_orders('BUY', 'SELL')
                self.POS += 1
                print('BUY - BTCUSDTF -- price {} -- '.format(
                    self.close_futures))
                self.SIGNAL_BUY = False

        if self.POS >= 0:
            if self.SIGNAL_SELL == True:
                # self.POS -= 1
                self._place_orders('SELL', 'BUY')
                self.POS -= 1
                print('SELL - BTCUSDTF -- price {} -- '.format(
                    self.close_futures))
                self.SIGNAL_SELL = False

    def _place_orders(self, first, second):

        self.client.futures_create_order(side=first,
                                         quantity=self.QUANTITY,
                                         symbol=self.SYMBOL,
                                         type='MARKET')

        if first == 'BUY':
            stop_loss = round(self.close_futures * 0.99, 2)
            stop_gain = round(self.close_futures * 1.1, 2)
        else:
            stop_gain = round(self.close_futures * .99, 2)
            stop_loss = round(self.close_futures * 1.1, 2)

        self.client.futures_create_order(side=second,
                                         quantity=self.QUANTITY,
                                         type='STOP_MARKET',
                                         symbol=self.SYMBOL,
                                         stopPrice=stop_loss)

        self.client.futures_create_order(side=second,
                                         quantity=self.QUANTITY,
                                         type='TAKE_PROFIT_MARKET',
                                         symbol=self.SYMBOL,
                                         stopPrice=stop_gain)

        if self.POS == 0:
            self.client.futures_cancel_all_open_orders(symbol=self.SYMBOL)
import time
import pandas as pd
from python_binance.binance.client import Client
from credentials import *

if __name__ == '__main__':

    while True:
        boolean = False
        signal = False
        new_request = []
        vector_of_new_pairs = []
        vector_of_coins = []
        trades = []

        client = Client(API_KEY, API_SECRET)

        with open('symbols.txt', 'r') as f:
            vector = [line.strip() for line in f]

        for key in client.get_exchange_info()['symbols']:
            new_request.append(key['symbol'])

        for value in new_request:
            if value not in vector:
                for cryptocoin in ["BUSD", "BTC", "ETH", "USDT"]:
                    if cryptocoin in value:
                        vector_of_new_pairs += [[
                            value.split(cryptocoin)[0], cryptocoin
                        ]]
                        boolean = True
Example #8
0
import time
import run_config
from datetime import datetime
from time import gmtime, strftime
import signal
import os
if os.name == 'nt':
    from timeout_win import timeout
else:
    from timeout import timeout

parser = argparse.ArgumentParser()
parser.add_argument("--coin", help='Coin code', default="BTC")
args = parser.parse_args()

Client = Client()

### Change to get different time ranges and intervals ###
range = "1 day ago UTC"  # e.g. "7 days ago UTC", etc.
interval = Client.KLINE_INTERVAL_1HOUR  # e.g. Client.KLINE_INTERVAL_1MINUTE, Client.KLINE_INTERVAL_3MINUTE

res = Client.get_historical_klines(f"{args.coin}USDT", interval, range)

l = []
for x in res:
    l.append(xfloat(x[4]))
    print(
        f"{datetime.utcfromtimestamp(int(x[0])/1000.0).strftime('%Y-%m-%d %H:%M:%S')}\t{xfloat(x[4]):.2f}"
    )

print(f"Record count in {range} with specified interval = {len(l)}")