Помогите с ботом Yobit

Код взят с блога

 

import os
import json
# import requests
import urllib, http.client
import hmac, hashlib

# Вписываем свои ключи
API_KEY = '' 
API_SECRET = b''

"""
    Каждый новый запрос к серверу должен содержать увеличенное число в диапазоне 1-2147483646
    Поэтому храним число в файле поблизости, каждый раз обновляя его
"""
nonce_file = "./nonce"
if not os.path.exists(nonce_file):
    with open(nonce_file, "w") as out:
        out.write('1')

# Будем перехватывать все сообщения об ошибках с биржи
class YobitException(Exception):
    pass
        
def call_api(**kwargs):

    # При каждом обращении к торговому API увеличиваем счетчик nonce на единицу
    with open(nonce_file, 'r+') as inp:
        nonce = int(inp.read())
        inp.seek(0)
        inp.write(str(nonce+1))
        inp.truncate()

    payload = {'nonce': nonce}

    if kwargs:
        payload.update(kwargs)
    payload =  urllib.parse.urlencode(payload)

    H = hmac.new(key=API_SECRET, digestmod=hashlib.sha512)
    H.update(payload.encode('utf-8'))
    sign = H.hexdigest()
    
    headers = {"Content-type": "application/x-www-form-urlencoded",
           "Key":API_KEY,
           "Sign":sign}
    conn = http.client.HTTPSConnection("yobit.net", timeout=60)
    conn.request("POST", "/tapi/", payload, headers)
    response = conn.getresponse().read()
    
    conn.close()

    try:
        obj = json.loads(response.decode('utf-8'))

        if 'error' in obj and obj['error']:
            raise YobitException(obj['error'])
        return obj
    except json.decoder.JSONDecodeError:
        raise YobitException('Ошибка анализа возвращаемых данных, получена строка', response)

print ('Получаем информацию по аккаунту', '*'*30)
print( call_api(method="getInfo") )

try:
    print ('Создаем ордер на покупку', '*'*30)
    print( call_api(method="Trade", pair="ltc_btc", type="buy", rate="0.1", amount=0.01) )
except YobitException as e:
    print("Облом:", e)

 

Покупка

print( call_api(method="Trade", pair="ltc_btc", type="buy", rate="0.1", amount=0.01) )

Rate получается цена (вводить приходиться самому), amount количество (вводить приходиться самому).

Как переделать код, чтобы бот цеплял рыночную цену или цену с ордеров на продажу и кол-во денег с баланса биржи.

04.01.2018 20:45:39

Вот как то так, попробуйте

import os
import json
# import requests
import urllib, http.client
import hmac, hashlib
import requests

# Вписываем свои ключи
API_KEY = '' 
API_SECRET = b''

TRADE_PAIR = 'ltc_btc'

"""
    Каждый новый запрос к серверу должен содержать увеличенное число в диапазоне 1-2147483646
    Поэтому храним число в файле поблизости, каждый раз обновляя его
"""
nonce_file = "./nonce"
if not os.path.exists(nonce_file):
    with open(nonce_file, "w") as out:
        out.write('1')

# Будем перехватывать все сообщения об ошибках с биржи
class YobitException(Exception):
    pass
        
def call_api(**kwargs):

    # При каждом обращении к торговому API увеличиваем счетчик nonce на единицу
    with open(nonce_file, 'r+') as inp:
        nonce = int(inp.read())
        inp.seek(0)
        inp.write(str(nonce+1))
        inp.truncate()

    payload = {'nonce': nonce}

    if kwargs:
        payload.update(kwargs)
    payload =  urllib.parse.urlencode(payload)

    H = hmac.new(key=API_SECRET, digestmod=hashlib.sha512)
    H.update(payload.encode('utf-8'))
    sign = H.hexdigest()
    
    headers = {"Content-type": "application/x-www-form-urlencoded",
           "Key":API_KEY,
           "Sign":sign}
    conn = http.client.HTTPSConnection("yobit.net", timeout=60)
    conn.request("POST", "/tapi/", payload, headers)
    response = conn.getresponse().read()
    
    conn.close()

    try:
        obj = json.loads(response.decode('utf-8'))

        if 'error' in obj and obj['error']:
            raise YobitException(obj['error'])
        return obj
    except json.decoder.JSONDecodeError:
        raise YobitException('Ошибка анализа возвращаемых данных, получена строка', response)

try:
    # Получаем текущие курсы
    ticker_data = json.loads(requests.get('https://yobit.net/api/3/ticker/' + TRADE_PAIR).text)
    print("Получены последние данные по паре (%s)\n" % ticker_data)
    for key, item in ticker_data[TRADE_PAIR].items():
        print(key, item)

    print ('Получаем информацию по аккаунту', '*'*30)

    # Получаем кол-во btc на балансе
    has_amount = call_api(method="getInfo")['return']['funds'][TRADE_PAIR.split('_')[1]]

    print ('Создаем ордер на покупку', '*'*30)
    # Ордер по средней (avg) цене на кол-во ltc=btc/курс
    print( call_api(method="Trade", pair=TRADE_PAIR, type="buy", rate=ticker_data['avg'], amount=has_amount/ticker_data['avg']))
except YobitException as e:
    print("Ошибка:", e)
ПроголосоватьПроголосовать
0 0
09.01.2018 15:18:22

спасибо, попробую, с меня причитается

ПроголосоватьПроголосовать
0 0
16.01.2018 08:26:38

ошибка Создаем ордер на покупку ****************************** Traceback (most recent call last): File "C:/Users/Alex/AppData/Local/Programs/Python/Python36-32/bot_yobit.py", line 78, in print( call_api(method="Trade", pair=TRADE_PAIR, type="buy", rate=ticker_data['avg'], amount=has_amount/ticker_data['avg'])) KeyError: 'avg' >>>
ПроголосоватьПроголосовать
0 0
16.01.2018 08:38:45
Пожалуйста, авторизуйтесь, что бы ответить на вопрос