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)