Работа с Yobit API как с публичным так и с торговым из Python 3

Public API - Это нужно, только для сбора некоторой информации и все. Торговать, выставлять, отменять ордера не получится.  Биржа даёт ссылку, вызываете её с методом, например "ticker" и нужной парой монет и получаете информацию за последние 24 часа о это паре. 

Trade API - Тут уже все не так просто. Но с этим API можно замутить полноценного торгового Бота, который сможет, покупать, продавать, выставлять, отменять ордера, короче можно все! Но тут не получится просто отправить запрос по какой либо ссылке и все, ордер выставился или что-то подобное произошло на бирже. Не получится, так как имеется необходимость в "Аутентификации" и подписи секретным ключом с помощью HMAC-SHA512. 

Функция для работы с Yobit API из Python 3

Но тебе повезло больше чем мне, сейчас я дам тебе все готовое и рабочие без допиливания и прочих танцев. Хотел по частям выложить и разъяснить что кого тут вообще, но решил кинуть все код сразу, а поясню ниже..

from time import time
import urllib.parse
import hashlib
import hmac
import requests
import json

APIkey = b'AAAAAAAAA'
API_SECRET = b'e777'
COINS1 = 'ltc'
COINS2 = 'rur'
COINS = COINS1 + '_' + COINS2

def GET_JSON(J):
    return(json.dumps(J, sort_keys=True, indent=4))

def API_YOBIT_PUBLIC(method, coin = False):
    if coin:
        result = requests.get('http://yobitex.net/api/3/' + method + '/' + coin)
        res_result = json.loads(result.content)
        return(res_result)
    else:
        result = requests.get('http://yobitex.net/api/3/' + method)
        res_result = json.loads(result.content)
        return(res_result)

def API_YOBIT_TRADE(method, method_up = ''):

    nonce_file = "nonce"

    with open(nonce_file, 'r+') as inp:
        nonce = int(inp.read())
        inp.seek(0)
        inp.write(str(nonce+1))
        inp.truncate()

    NonceNum = {'nonce': nonce}

    payload = {
        'method': method,
        'nonce': NonceNum['nonce']
    }

    if method_up:
        payload.update(method_up)

    paybytes = urllib.parse.urlencode(payload).encode('utf8')
    sign = hmac.new(API_SECRET, paybytes, hashlib.sha512).hexdigest()

    headers = {"Content-type": "application/x-www-form-urlencoded",
               "Key":APIkey,
               "Sign":sign
               }

    obj = requests.post('http://yobitex.net/tapi/', headers=headers, data=paybytes)

    if obj.status_code == 200:
        obj = obj.json()

        if method == 'ActiveOrders' or 'TradeHistory':
            try:
                key_id = {}
                for key, vel in obj['return'].items():
                    key_id.update({key:vel})
                return(key_id)
            except:
                return (False)
        else:
            return (obj)
    else:
        return('Error code: ' + str(obj.status_code))

В общем функция "API_YOBIT_PUBLIC" это для работы, как не странно с "Public API" Ты её можешь переписать, как тебе угодно, я оставил так как она есть сейчас, мне так удобнее... 

Ну и функция "API_YOBIT_TRADE" нужна для использования "Trade API" и сейчас я покажу как её правильно вызвать. Допустим нужно получить информацию о активных ордерах, которые в данный момент весят на покупку или продажу. Для этого, исходя из документации биржи, нужно вызвать метод "ActiveOrders" с параметром "pair" которому нужно передать нужную пару монет, например "ltc_rur". 

Сделать это можно очень просто. Соберём информацию.

Trade_API = {
    'pair':COINS
}

И вызовем функцию. (Помним что в "COINS" лежит пара монет)

Result_Trade = API_YOBIT_TRADE('ActiveOrders', Trade_API)
print(GET_JSON(Result_Trade))

Если есть активные ордера, то биржа вернёт информацию о них в Json формате. Если активных ордеров нет, то функция вернёт "False". Ещё пример. Посмотрим историю сделок и выведем только 3 сделки из всей истории. Так же собираем информацию.

Trade_API = {
    'pair':COINS,
    'count' : 3
}

И точно так же вызываем функцию, только уже с методом "TradeHistory"

Result_Trade = API_YOBIT_TRADE('TradeHistory', Trade_API)
print(GET_JSON(Result_Trade))

Получаем ответ и информацию о сделках в JSON формате. С которой можно продолжить работать, как тебе нужно и как хочется. Заключение: Как видишь, все очень просто и легко, теперь можно использовать эту функцию для работы с API Yobit и строить свою логику торговли или зачем тебе это.

Оставить комментарий