Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
gmaster
7 лет назад

LiveCoin API и бот на Python3


Сегодня запустил своего первого трейдинг бота.
Признаюсь, его создание было для меня не самой лёгкой задачей. Ибо, далеко не погромизд и последний раз код видел лет семь назад, когда учился в универе и писал какую-то шнягу со свом знакомым на пыхыпе просто для развлечения.
Но, наличие свободного времени и достаточной мотивации творит чудеса. Всего три дня на написание, два на отладку и бот готов.
Конечно, код хуже чем у неграмотного индуса, костыли, глобальные переменные и прочая гадость. Про ООП я конечно же в курсе, но всё забыл, посему оно есть, но в зачаточном состоянии.
И таки это работает, выставляет ордера, и даже следит за курсом валют на другой бирже.
Пока играю небольшим депозитом размером 0,002BTC. Если получится, недельки через две постараюсь запилить отчет с результатами эксперементов. Хотя профит уже есть, хотя-бы от того, что нереально доставляет наблюдать за людьми, которые пытаются перебить ставку бота.
Ниже код для работы с API биржи LiveCoin, адаптированный для Python3. На сайте у них примеры есть, но только для версии 2.7. Для профессионала может быть и не такая большая проблема переписать API для третьей версии, но у меня данная процедура вызвала затруднения. Не то, что бы очень большие, но пару часов на написание этих процедур я таки убил. Поэтому, то что представлено ниже, думаю вполне может кому-нибудь пригодиться.
В остальном, для начинающего ботописца на питоне препятствий не вижу, вся инфа и куча примеров для работы с API крупных бирж есть в общем доступе.

def get_ballance(self):
    method = '/payment/balance'
    data = OrderedDict([('currency', self.name)])
    encoded_data = urllib.parse.urlencode(data)
    sign = hmac.new( secret_key.encode(), msg=encoded_data.encode(), digestmod=hashlib.sha256).hexdigest().upper()
    headers = {"Api-key": api_key, "Sign": sign}
    conn = http.client.HTTPSConnection(server)
    conn.request("GET", method + '?' + encoded_data, '', headers)
    response = conn.getresponse().read().decode('utf-8')    
    conn.close()
    value = json.loads(response)
    print('на счету ', value['value'], self.name)
    return(value)
        
def buy_currency(self, quantity, price):
    method = "/exchange/buylimit"
    data = OrderedDict(sorted([('currencyPair', self.name + '/BTC'),('price', price),('quantity', quantity)]))
    encoded_data = urllib.parse.urlencode(data)
    sign = hmac.new(secret_key.encode(), msg=encoded_data.encode(), digestmod=hashlib.sha256).hexdigest().upper()
    headers = {"Api-key": api_key, "Sign": sign, "Content-type": "application/x-www-form-urlencoded"}
    conn = http.client.HTTPSConnection(server)
    conn.request("POST", method, encoded_data, headers)
    response = conn.getresponse().read().decode('utf-8')
    conn.close()
    value=json.loads(response)
    if value['success'] == True:
        print('успешно создан ордер на покупку', str(quantity), self.name, 'по курсу', str(price), ' #:', value['orderId'])
        return(value['orderId'])
    else:
        return('error')

def sell_currency(self, quantity, price):
    method = "/exchange/selllimit"
    data = OrderedDict(sorted([('currencyPair', self.name + '/BTC'),('price', price),('quantity', quantity)]))
    encoded_data = urllib.parse.urlencode(data)
    sign = hmac.new(secret_key.encode(), msg=encoded_data.encode(), digestmod=hashlib.sha256).hexdigest().upper()
    headers = {"Api-key": api_key, "Sign": sign, "Content-type": "application/x-www-form-urlencoded"}
    conn = http.client.HTTPSConnection(server)
    conn.request("POST", method, encoded_data, headers)
    response = conn.getresponse().read().decode('utf-8')
    conn.close()
    value=json.loads(response)
    if value['success'] == True:
        print('успешно создан ордер на продажу', str(quantity), self.name, 'по курсу', str(price), ' #:', value['orderId'])
        return(value['orderId'])
    else:
        print(value)
        return('error')

def cancel_order(self, orderId):
    method = "/exchange/cancellimit"
    data = OrderedDict(sorted([('currencyPair', self.name + '/BTC'),('orderId', orderId)]))
    encoded_data = urllib.parse.urlencode(data)
    sign = hmac.new(secret_key.encode(), msg=encoded_data.encode(), digestmod=hashlib.sha256).hexdigest().upper()
    headers = {"Api-key": api_key, "Sign": sign, "Content-type": "application/x-www-form-urlencoded"}
    conn = http.client.HTTPSConnection(server)
    conn.request("POST", method, encoded_data, headers)
    response = conn.getresponse().read().decode('utf-8')
    conn.close()
    value=json.loads(response)
    if value['cancelled'] == True:
        print('успешно отменен ордер #', orderId, 'объёмом', value['quantity'], self.name)
        return('cancelled')
    else:
        return('error')

def get_order_info(self, orderId):
    method = '/exchange/order'
    data = OrderedDict([('orderId', orderId)])
    encoded_data = urllib.parse.urlencode(data)
    sign = hmac.new( secret_key.encode(), msg=encoded_data.encode(), digestmod=hashlib.sha256).hexdigest().upper()
    headers = {"Api-key": api_key, "Sign": sign}
    conn = http.client.HTTPSConnection(server)
    conn.request("GET", method + '?' + encoded_data, '', headers)
    response = conn.getresponse().read().decode('utf-8')    
    conn.close()
    value = json.loads(response)
    print('статус ордера #', orderId, ' ',  value['status'])
    return(value)






483
0.886 GOLOS
На Golos с May 2017
Комментарии (4)
Сортировать по:
Сначала старые