Exemplo n.º 1
0
def read_bitmex(test, api_key, api_secret, symbol,
                binSize):  # test = True switches on TESTNET
    client = bitmex.bitmex(test=test, api_key=api_key, api_secret=api_secret)
    client = bitmex.bitmex()
    df = client.Trade.Trade_getBucketed(symbol=symbol,
                                        binSize=binSize,
                                        count=500,
                                        reverse=True).result()
    df = pd.DataFrame(df[0])
    #    df = df[['timestamp', 'open', 'high', 'low', 'close', 'volume', 'turnover', 'trades']]
    df = df[['timestamp', 'open', 'high', 'low', 'close', 'volume']]
    #    df = df.rename(columns={'timestamp':'DATETIME', 'open':'OPEN', 'high':'HIGH', 'low':'LOW', 'close':'CLOSE', 'volume':'VOLUME', 'turnover':'TURNOVER', 'trades':'TRADES'})
    df = df.rename(
        columns={
            'timestamp': 'DATETIME',
            'open': 'OPEN',
            'high': 'HIGH',
            'low': 'LOW',
            'close': 'CLOSE',
            'volume': 'VOLUME'
        })
    df.set_index('DATETIME', inplace=True)
    df.index = pd.to_datetime(df.index, format='%Y-%m-%dT%H:%M:%S')
    df.sort_index(inplace=True, ascending=True)
    return df
Exemplo n.º 2
0
    def create_gateway_obj(self, exchange, setting):
        """
        创建gateway对象
        :param exchange: 交易所
        :param setting: 配置信息
        :return: 交易所对象
        """
        if "BITMEX" == exchange:
            # _bitmex 避免和 bitmex 模块重名,所以加下划线区分
            _bitmex = ccxt.bitmex(setting)
            # 设置为测试服务器
            _bitmex.urls["api"] = _bitmex.urls["test"]
            _bitmex.urls["www"] = _bitmex.urls["test"]
            # 引入bitmex官方的对象
            _bitmex.client = bitmex.bitmex(test=True, api_key=setting["apiKey"], api_secret=setting["secret"])
            return _bitmex
        elif "BITMEX_REAL" == exchange:
            # bitmex实盘对象
            # _bitmex 避免和 bitmex 模块重名,所以加下划线区分
            _bitmex = ccxt.bitmex(setting)

            # 引入bitmex官方的对象
            _bitmex.client = bitmex.bitmex(test=False, api_key=setting["apiKey"], api_secret=setting["secret"])
            return _bitmex
        elif "OKEX" == exchange:
            obj_okex = ccxt.okex3()
            return obj_okex
        else:
            pass
Exemplo n.º 3
0
 def __init__(self, api_key, api_secret, main_net=False):
     logging.info(f"Initialize client. Main net: {main_net}")
     if main_net:
         self.client = bitmex.bitmex(test=False,
                                     api_key=api_key,
                                     api_secret=api_secret)
         # self.ws = BitMEXWebsocket(endpoint="https://www.bitmex.com/api/v2", symbol="XBTUSD", api_key=api_key,
         #                          api_secret=api_secret)
     else:
         self.client = bitmex.bitmex(test=True,
                                     api_key=api_key,
                                     api_secret=api_secret)
Exemplo n.º 4
0
 def set_network(self, args):
     if args.live:
         self.CONFIG_VARS['testnet'] = False
         self.client = bitmex.bitmex(
             test=False,
             api_key=self.CONFIG_VARS['REAL_API_KEY'],
             api_secret=self.CONFIG_VARS['REAL_API_SECRET'])
     if args.test:
         self.CONFIG_VARS['testnet'] = True
         self.client = bitmex.bitmex(
             test=True,
             api_key=self.CONFIG_VARS['TEST_API_KEY'],
             api_secret=self.CONFIG_VARS['TEST_API_SECRET'])
Exemplo n.º 5
0
 def __init__(self, do_init_symbols=False, do_fill_history=False):
     super().__init__(name='Feeder', daemon=True)
     self.endpoint = "https://testnet.bitmex.com/api/v1" if config.TEST_NET else "https://www.bitmex.com/api/v1"
     self.ws = BitMexWS(endpoint=self.endpoint,
                        api_key=None,
                        api_secret=None)
     self.api = bitmex.bitmex(test=config.TEST_NET)
     self.api_auth = bitmex.bitmex(test=config.TEST_NET,
                                   api_key=config.EXCHANGE_PUBLIC_KEY,
                                   api_secret=config.EXCHANGE_SECRET_KEY)
     self.do_init_symbols = do_init_symbols
     self.do_fill_history = do_fill_history
     self.logger = logging.getLogger(self.__class__.__name__)
     self.is_working = False
Exemplo n.º 6
0
    def __init__(self, trade, leverage, tp, test, ord_type):
        self.bitmex_api_key = Config.get('Bitmex', 'api_key')
        self.bitmex_api_secret = Config.get('Bitmex', 'api_secret')
        self.bitmex_api_key_t = Config.get('Bitmex-Testnet', 'api_key')
        self.bitmex_api_secret_t = Config.get('Bitmex-Testnet', 'api_secret')
        self.slack_api = Config.get("Slack", 'api_key')
        self.trade = trade
        self.long = False
        self.type = 'GoodTillCancel'
        self.ord_type = ord_type
        self.short = False
        print('sending trades? ' + str(self.trade))
        self.leverage = leverage
        self.take_profit = tp
        self.stop_loss = 0.1  # 10%
        self.slips = []

        if test and 1 == 2:
            self.auth_client_bitmex = bitmex.bitmex(
                test=True,
                api_key=self.bitmex_api_key_t,
                api_secret=self.bitmex_api_secret_t)
            print('testnet')
        elif 1 == 2:
            self.auth_client_bitmex = bitmex.bitmex(
                test=False,
                api_key=self.bitmex_api_key,
                api_secret=self.bitmex_api_secret)
            print('LIVE')
        try:
            self.auth_client_bitmex.Position.Position_updateLeverage(
                symbol='XBTUSD', leverage=leverage).result()
            self.last_bal = float(
                self.auth_client_bitmex.User.User_getMargin().result()[0]
                ['marginBalance'] / 100000000)
        except:
            pass

        self.channel = 'tradeupdates'
        self.channel_trades = 'trades'
        self.client = slack.WebClient(self.slack_api, timeout=30)
        self.trade_template = {
            'signal_price': 0.0,
            'fill_price': 0.0,
            'quantity': 0.0,
            'leverage': 1,
            'side': '',
            'timestamp': ''
        }
Exemplo n.º 7
0
    def __init__(self, apiKey, apiSecret, pairs, name):

        super().__init__(apiKey, apiSecret, pairs, name)
        self.pairs = list(
            map(
                lambda pair: self.translate(pair)
                if pair != self.translate(pair) else self.logger.debug(
                    f"Can't translate word {pair} in {self.exchange_name}"),
                self.pairs))
        self.pairs = list(filter(None, self.pairs))
        self.connection = bitmex.bitmex(api_key=apiKey, api_secret=apiSecret)
        self.socket = {}
        # self.firts_copy_flag = True
        self.balance_updated = False

        self.socket['XBTUSD'] = BitMEXWebsocket(
            endpoint=self.ENDPOINT,
            symbol='XBTUSD',
            api_key=self.api['key'],
            api_secret=self.api['secret'],
            on_balance_update=self.on_balance_update)
        for pair in self.pairs:
            if pair == 'XBTUSD':
                continue
            self.socket[pair] = BitMEXWebsocket(endpoint=self.ENDPOINT,
                                                symbol=pair,
                                                api_key=self.api['key'],
                                                api_secret=self.api['secret'])
    def startAdapter(self):
        # set info for position managers
        for i, pos in self.tradeTickerPositionMap.items():
            pos.setBaseCashValue(self.cashBaseValue)

        # rest api
        self.restAPI = bitmex.bitmex(test=self.isTestSystem, api_key=self._api_key, api_secret=self._secret_key)

        time.sleep(1)

        """连接服务器"""
        # adapters.websocket.enableTrace(False)
        # zzdai? 针对一个ticker,后期优化
        self._ws_url = self.getSubscribeUrls(self.workingTickers[0])
        self._ws = adapters.websocket.WebSocketApp(self._ws_url,
                                          on_message=self.on_message,
                                          on_error=self.on_error,
                                          on_close=self.on_close,
                                          on_open=self.on_open,
                                          header=self.getAuth())

        self.thread = Thread(target=self._ws.run_forever)
        self.thread.start()

        conn_timeout = 5
        while not self._ws.sock or not self._ws.sock.connected and conn_timeout:
            time.sleep(1)
            conn_timeout -= 1
        if not conn_timeout:
            print("[ERR]: ", adapters.coinUtilities.getCurrentTimeString(), \
                  "link to", self.getAPI_name(), "failed", file=sys.stderr)

        # query account info
        self.query_future_userinfo()
def Conn_REST_BitMEX(StartTime):
    now = datetime.now()
    before_now = now

    if before_now.minute % 5 == 0:
        Minutes = before_now.minute
    else:
        Minutes = before_now.minute - (before_now.minute % 5)

    client = bitmex(test=False, api_key=None, api_secret=None)
    StartTime = from_SGT_to_UTC(StartTime)
    EndTime = from_SGT_to_UTC(
        datetime(before_now.year, before_now.month, before_now.day,
                 before_now.hour, Minutes, 0))

    trades = client.Trade.Trade_getBucketed(binSize='5m',
                                            partial=True,
                                            symbol='XBTUSD',
                                            count=200,
                                            startTime=StartTime,
                                            endTime=EndTime).result()[0]

    i = 0
    for element in trades:
        ToDB = {}
        ToDB['time_period_end'] = from_UTC_to_SGT(element['timestamp'])
        ToDB['price_open'] = element['open']
        ToDB['price_high'] = element['high']
        ToDB['price_low'] = element['low']
        ToDB['price_close'] = element['close']
        ToDB['volume'] = element['volume']

        export_to_MySQL(ToDB)

        i = i + 1
Exemplo n.º 10
0
def get_data(start_time: datetime = datetime(2019, 6, 27),
             symbol: str = "XBTUSD",
             delay: float = 0.2):
    clinet = bitmex.bitmex(test=True, api_key=API_KEY, api_secret=API_SECRET)

    trades = []

    count = 500
    start = 0

    while True:
        try:
            query = clinet.Trade.Trade_get(symbol=symbol,
                                           startTime=start_time,
                                           start=start,
                                           count=count,
                                           reverse=True)
            response = query.result()[0]
        except Exception as e:
            logging.error(e)
            continue

        trades.extend(response)

        if len(response) < count:
            break

        start += count
        sleep(delay)

    return trades
Exemplo n.º 11
0
 def __init__(self, pipe_price, pipe_order, TestServer, api_key,
              api_secret):
     self.__pipe_price = pipe_price
     self.__pipe_order = pipe_order
     self.client = bitmex.bitmex(test=TestServer,
                                 api_key=api_key,
                                 api_secret=api_secret)
Exemplo n.º 12
0
    def tmp(self):
        # print(self.get_balance(quotes_df))
        # random.seed(3) # remove when done debugging. <------------------------------------
        # current_time = quotes_df.index.tolist()[0] # extrapolate latest time
        # random_int = random.randint(0,1)
        # action_list = ['Buy','Sell']
        # random_action = action_list[random_int]
        # logger.info("Random action: {}".format(random_action))
        # clOrdLinkID = str(uuid.uuid4()) # generate unique ID
        logger.info("%%%%%%%%%")

        # # set main order
        # order = self.exchange.send_smart_order(side=random_action, orderQty=settings.ORDER_QUANTITY)
        self.bitmex = bitmex.bitmex(test=settings.USE_TESTNET,
                                    api_key=settings.API_KEY_TEST,
                                    api_secret=settings.API_SECRET_TEST)
        logger.info("Connected to TESTNET")
        # order = self.bitmex.Order.Order_new(symbol=settings.SYMBOL, side='Buy', orderQty=100, ordType='Market').result()
        order = self.bitmex.Order.Order_new(
            symbol=settings.SYMBOL,
            side='Buy',
            orderQty=100,
            ordType='Limit',
            execInst='ParticipateDoNotInitiate',
            price='8700').result()

        order_id = order[0]['orderID']

        # logger.info(order)

        # logger.info('%%%$$$$$')
        logger.info(self.exchange.cancel_order_by_id(order_id))
Exemplo n.º 13
0
 def __init__(self, account):
     try:
         self.client = bitmex.bitmex(api_key=account.api_key,
                                     api_secret=account.api_secret)
     except Exception as e:
         print(e)
         raise APIException(detail='bitmex api not available')
def Conn_REST_BitMEX(StartTime):

    try:
        client = bitmex(test=False, api_key=None,
                        api_secret=None)  ### Risk of 502 Error : Bad Gateway
        StartTime = from_SGT_to_UTC(StartTime)

        print(StartTime)
        trades = client.Trade.Trade_getBucketed(
            binSize='5m',
            partial=True,
            symbol='XBTUSD',
            count=2,
            startTime=StartTime).result()[0]
        ## Risk of 503 Error : Service Unavailable
        i = 0
        for element in trades:
            ToDB = {}
            ToDB['time_period_end'] = from_UTC_to_SGT(element['timestamp'])
            ToDB['price_open'] = element['open']
            ToDB['price_high'] = element['high']
            ToDB['price_low'] = element['low']
            ToDB['price_close'] = element['close']
            ToDB['volume'] = element['volume']
            print(i)
            print(ToDB)
            if i == 0:
                #export_to_MongoDB_sub(ToDB)
                export_to_MySQL(ToDB)

            i = i + 1
    except Exception as e:
        print(e)
        msg = "BitMEX server에서 Error가 발생하였습니다.\n" + str(e)
        Telegram_Alert(msg)
Exemplo n.º 15
0
def main():
    client = bitmex.bitmex(test=False,
                           api_key=get_auth('APIKEY'),
                           api_secret=get_auth('SECRET'))

    request_instrument(client, li=('highPrice', 'lowPrice', 'lastPrice'))
    request_funding(client)
Exemplo n.º 16
0
    def __init__(self, apiconfpth=kfpth):

        f = open(apiconfpth, 'r')
        lines = f.readlines()
        f.close()

        apikey = lines[0].replace('\r', '').replace('\n', '')
        secretkey = lines[1].replace('\r', '').replace('\n', '')

        self.client = bitmex.bitmex(test=True,
                                    api_key=apikey,
                                    api_secret=secretkey)
        # https://www.bitmex.com/realtime
        # https://www.bitmex.com/api/v1
        self.ws = BitMEXWebsocket(
            endpoint="https://testnet.bitmex.com/realtime",
            symbol="XBTUSD",
            api_key=None,
            api_secret=None)

        self.logger = self.setup_logger()

        self.logger.info("Instrument data: %s" % self.ws.get_instrument())

        AlarmPrice.initAlarmObj(self.ws)
Exemplo n.º 17
0
    def get(request, order_id):
        """Show order info for an account"""
        account_name = request.query_params.get('account')
        try:
            account = _get_account_(account_name)
        except AccountNotFound as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_404_NOT_FOUND,
            )

        client = bitmex(
            test=BITMEX_TEST_MODE,
            api_key=account.api_key,
            api_secret=account.api_secret,
        )
        filter_ = json.dumps({'orderID': order_id})
        try:
            result, _ = client.Order.Order_getOrders(filter=filter_).result()
        except HTTPUnauthorized as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_401_UNAUTHORIZED,
            )

        if not result:
            return Response(
                data={
                    'error': f'Can not find any order with order id: {order_id!r} '
                             f'for the account name: {account.name!r}'
                },
                status=status.HTTP_404_NOT_FOUND,
            )
        return Response(result)
Exemplo n.º 18
0
 def __init__(self):
     self.symbol = settings.SYMBOL
     self.bitmex = bitmex.bitmex(api_key=settings.API_KEY,
                                 api_secret=settings.API_SECRET,
                                 test=False)
     self.ws = BitMEXWebsocket()
     self.ws.connect(settings.BASE_URL, self.symbol)
Exemplo n.º 19
0
class BitmexClient:
    api_key = '94IFRKCGQj_ViW4KLvCvQ1nO'  # API KEY
    api_secret = 'w9x9w_rYkgc-RPzbEjx1VyItYTUkhOs1pCfAZivRrNqJ-HD9'  # SECRET API KEY
    client = bitmex(test=False, api_key=api_key, api_secret=api_secret)

    # Function returns array of records for specified symbol(e.g 'ICXBTC'), interval('1m', '5m', '1h', '1d')
    # and desired "start day"(datetime(Y,M,D)). Array consists of below arrays
    # [
    #     {
    #         "timestamp": "2020-05-27T13:34:46.996Z",
    #         "symbol": "string",
    #         "open": 0,
    #         "high": 0,
    #         "low": 0,
    #         "close": 0,
    #         "trades": 0,
    #         "volume": 0,
    #         "vwap": 0,
    #         "lastSize": 0,
    #         "turnover": 0,
    #         "homeNotional": 0,
    #         "foreignNotional": 0
    #     }
    # ]

    def get_historical_data_with_interval(self, symbol, interval, start):
        now = datetime.now()
        start = start.strftime("%d %b %Y %H:%M:%S")
        data = \
        self.client.Trade.Trade_getBucketed(symbol=symbol, binSize=interval, startTime=start, endTime=now).result()[0]

        return data
Exemplo n.º 20
0
 def wrapper(instance, request, *args, **kwargs):
     name = request.query_params.get('account')
     account = get_object_or_404(Account.objects.all(), name=name)
     instance.client = bitmex.bitmex(test=True,
                                     api_key=account.api_key,
                                     api_secret=account.api_secret)
     instance.account = account
     return func(instance, request, *args, **kwargs)
Exemplo n.º 21
0
def amount_in_orders():
    client = bitmex.bitmex(test=TESTNET_EXCHANGE,
                           api_key=BITMEX_API_KEY,
                           api_secret=BITMEX_API_SECRET)

    result = client.Position.Position_get().result()

    return float(result[0][0]['currentQty'])
Exemplo n.º 22
0
 def update_strategy(self, strategy):
     self.strategy = strategy
     if strategy.api_key and self.api_key != strategy.api_key:
         self.api_key = strategy.api_key
         self.api_secret = strategy.api_secret
         self.client = bitmex.bitmex(test=False,
                                     api_key=self.api_key,
                                     api_secret=self.api_secret)
Exemplo n.º 23
0
    def __init__(self, symbol):
        self.ctr = 0
        self.symbol = symbol
        #self.logger = self.setup_logger()

        # hoang: wbFfEOkZqut7OG8rueCPTmEsCsYHyqxakxlg1dNoZbz7EJ6w
        # hoang: ZJ7ZG0bDrem884wQkNnvv2PB

        api_key = "ZJ7ZG0bDrem884wQkNnvv2PB"  #"9FR7reF9F71NDZG_BDoMsfm9" # 8vXVw923QlDRoRtXSwvwbXlU
        api_secret = "wbFfEOkZqut7OG8rueCPTmEsCsYHyqxakxlg1dNoZbz7EJ6w"  #"TiXEEabXxJ_KX5ev_RoOnB-JVQqDdj4AAMJvRBXpPhtAKGVH" # nFZS4qiArohuyY_4J9oGBk49X2iL5LteAXCrHcHveF6j5Gwi

        # Instantiating the WS will make it connect. Be sure to add your api_key/api_secret.
        self.ws = BitMEXWebsocket(endpoint="https://www.bitmex.com/api/v1",
                                  symbol=self.symbol,
                                  api_key=api_key,
                                  api_secret=api_secret)
        self.ws.get_instrument()

        #self.logger.info("Instrument data: %s" % self.ws.get_instrument())
        self.client = bitmex.bitmex(test=False,
                                    api_key=api_key,
                                    api_secret=api_secret)
        self.last_r = None
        self.last_spread = None
        #self.clean = False

        self.tick = []
        self.cur_volatility = None
        self.act_volatility = None
        self.streak = 0
        self.prev_len = 0
        self.cur_len = 0
        self.idle = 0
        self.first = True
        self.sleep_ctr = 0
        self.general_ctr = 0

        exchange = ccxt.bitmex()
        date_N_days_ago = (
            datetime.datetime.now() -
            datetime.timedelta(hours=2)).strftime("%Y-%m-%d %H:%M:%S")
        since = time.mktime(
            datetime.datetime.strptime(date_N_days_ago,
                                       "%Y-%m-%d %H:%M:%S").timetuple()) * 1000
        df = exchange.fetch_ohlcv('ETH/USD',
                                  timeframe='1m',
                                  since=since,
                                  limit=500)
        df = pd.DataFrame(df)
        df.columns = ["Timestamp", "Open", "High", "Low", "tick", "Volume"]

        self.df = pd.DataFrame({'tick': df.tick.values.tolist()})
        #print (df.tail())
        #print (self.df.tail())

        # always fetch df using ccxt
        # check number of pos: if len(pos) > 0 : self.first = False
        logging.info("App Initiated!")
Exemplo n.º 24
0
    def post(request):
        """Create new order for an account"""
        try:
            account_name = request.query_params.get('account')
            account = _get_account_(account_name)
        except AccountNotFound as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_404_NOT_FOUND,
            )

        client = bitmex(
            test=BITMEX_TEST_MODE,
            api_key=account.api_key,
            api_secret=account.api_secret,
        )
        try:
            # FIXME: it always raises error:
            #  "Account has insufficient Available Balance"
            result, _ = client.Order.Order_new(
                symbol=request.data['symbol'],
                orderQty=request.data['volume'],
                side=request.data['side'],
                ordType='Market',
            ).result()
        except HTTPUnauthorized as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_401_UNAUTHORIZED,
            )
        except HTTPNotFound as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_404_NOT_FOUND,
            )
        except HTTPBadRequest as err:
            return Response(
                data={'error': str(err)},
                status=status.HTTP_400_BAD_REQUEST,
            )
        except KeyError as err:
            return Response(
                data={'error': f'Missed mandatory field {err}'},
                status=status.HTTP_400_BAD_REQUEST,
            )

        serializer = OrderSerializer(
            data={
                **request.data,
                'order_id': result.get('orderID'),
                'price': result.get('price'),
                'account': account.id,
            }
        )
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 25
0
 def get_client(self):
     if self.client is None:
         account = self.get_account()
         # default test=True. Можна добавити окремим полем в модель Account.
         try:
             self.client = bitmex.bitmex(api_key=account.api_key, api_secret=account.api_secret)
         except Exception:
             raise ValidationError('Failed to connect to BitMEX on account data.')
     return self.client
 def _fetch_raw_responses(self, date_list: list) -> list:
     client = bitmex.bitmex(test=False,
                            api_key=self.api_key,
                            api_secret=self.api_secret)
     raw_responses: list = list()
     for timestamp in tqdm(date_list):
         response = self._get_data_via_api_call(client, timestamp)
         raw_responses.append(response)
     return raw_responses
Exemplo n.º 27
0
 def __init__(self, test=True, **kwargs):
     """
     added parameted for the client in bitmex
     :param test:
     """
     super().__init__(**kwargs)
     self.client = bitmex.bitmex(test=test, api_key=self.apiKey, api_secret=self.apiSecret)
     self.logger = logging.getLogger("Bitmex If")
     self.logger.setLevel(logging.DEBUG)
Exemplo n.º 28
0
def run_bot(key, secret, confidence, risk, reward):
    # api_key = "-iXO_17idCPYYQgGsRtB7HfI"
    # api_secret = "yod97ok0bHhrdumSb4XnF0KDAg1LH0QciHkVyHb3sF0z0Y8J"

    client = bitmex.bitmex(test=True, api_key=api_key, api_secret=api_secret)

    conn = sqlite3.connect("btc.db")

    model = load("BTC_100m_forecast.joblib")

    while True:
        try:
            position = get_position(client)
        except (bravado.exception.HTTPServiceUnavailable):
            time.sleep(5)
            position = get_position(client)

        data = pd.read_sql_query(
            "SELECT * FROM book_imbalances_lag_10 ORDER BY time DESC LIMIT 501 ",
            conn,
        )[::-1].reset_index(drop=True).drop(columns=["index", "lag period"])

        # Transform dataframe
        transformed = data.copy()
        history = 500

        shifts = [x for x in list(range(1, history + 1))]
        for shift in shifts:
            transformed["t-oir-" +
                        str(shift)] = transformed["oir"].shift(shift)
            transformed["t-voi-" +
                        str(shift)] = transformed["voi"].shift(shift)
            transformed["t-tfi-" +
                        str(shift)] = transformed["tfi"].shift(shift)
            transformed["t-midprice-" +
                        str(shift)] = transformed["midprice"].shift(shift)

        transformed = transformed.dropna()
        transformed = transformed.set_index("time").drop(
            ["midprice", "oir", "voi", "tfi"], axis=1)

        prediction = model.predict(transformed)[0]
        probs = model.predict_proba(transformed)[0][prediction]

        try:
            if position[0][0]['isOpen'] == False:
                if probs >= confidence:
                    place_orders(client, prediction, risk, reward)

            print("Entry:", position[0][0]['avgEntryPrice'])
            print("Unrealised PnL %:", position[0][0]['unrealisedPnlPcnt'])
            print("`^*^`" * 8, "\n")
            time.sleep(5)

        except (IndexError):
            print("Position Error", "\n")
            time.sleep(5)
Exemplo n.º 29
0
 def __init__(self, stg_run_id, **run_mode_params):
     super().__init__(stg_run_id, **run_mode_params)
     self.trader_api = bitmex(test=config.TEST_NET,
                              api_key=config.EXCHANGE_PUBLIC_KEY, api_secret=config.EXCHANGE_SECRET_KEY)
     self.currency_balance_dic = {}
     self.currency_balance_last_get_datetime = None
     self.symbol_currency_dic = None
     self.symbol_precision_dic = None
     self._datetime_last_rtn_trade_dic = {}
     self._datetime_last_update_position_dic = {}
Exemplo n.º 30
0
    def test_order(self):
        client = bitmex.bitmex(test=True, api_key=self.api_key, api_secret=self.api_secret)
        result = client.Order.Order_new(symbol="XBTUSD", ordType='Limit', orderQty=1, price=3691,
                                        execInst='ParticipateDoNotInitiate', text='BB_LONG').result()

        order = result[0]
        order_id = order['orderID']
        order_status = order['ordStatus'] # Canceled
        print(f'order_id[{order_id}] status[{order_status}]')
        print(result)
Exemplo n.º 31
0
import bitmex
import smtrad
import time
import datetime as dt
import os

# Чтение файла с акками
login = input('Введите логин: ')
setdata = 'setdata.txt'
setdata = pd.read_csv(os.path.join(os.path.dirname(__file__),setdata), index_col = 'login')
api_key = setdata.loc[login, 'ak']
api_secret = setdata.loc[login, 'as']

# Подключение к BITMEX sm00th
client = bitmex.bitmex(test=True,
                       api_key = api_key,
                       api_secret = api_secret)

# Вводные данные
curr = setdata.loc[login, 'curr']
timeframe = setdata.loc[login, 'timeframe']
rsi_period=7
last_qt = client.Trade.Trade_getBucketed(symbol='XBTUSD', binSize='1h', count=1 , reverse=True).result()[0][0]['close']
balance = client.User.User_getWallet().result()[0]['amount'] * last_qt / 100000000
koeff = 4
orderQty = balance // koeff
poza = 0
time_dict = {'1m':60, '5m':300, '1h':3600}

print(login, timeframe, curr, orderQty)