Перейти к публикации
Форум ботоводов

Binance отловить ответ


Рекомендованные сообщения

Вопрос:

А как отловить ответ Бинанса, много писали в блоге про бота, что Бинанс может как предупреждение лимитов или ошибки какой нибудь дать код ответа например 1021 или не помню какой именно )) И писали что типа если вы получили предупреждение то стоит бота "тормознуть" на 5 минут чтоб бан не поймать и т.п. Вот и вопрос теоретический код ответа придет же на любой запрос хоть инфу по свечкам получаешь, хоть по парам, хоть цены? Тобишь по идеи надо условие на проверку сначала ставить перед КАЖДЫМ разбором ответа? Типа так:

server_response=ответ json

if server_response

 != ошибка или предупреждение:


     ,,,,,,,

else timeslip (3000)

Ссылка на комментарий
Поделиться на других сайтах

Ну вообще да, отправили запрос, посмотрели код ответа, если 429, то нужно притормозить.. 

Вот примерно так можно подойти к опасной черте, если интернет хороший, и отойти назад

import requests

while True:
    # В бесконечном цикле получаем тикер без пауз и без пар, пока не погонят
    r = requests.get('https://api.binance.com/api/v1/ticker/24hr')
    print("Код ответа Binance", r.status_code)
    
    # r.status_code = 200 => Всё ок, ответ получен без проблем
    # r.status_code = 429 => Превышен лимит, пора сделать паузу
    # r.status_code = 418 => Всё, забанили на пару минут, если продолжать то время бана увеличится 
    
    if r.status_code != 200:
        break

А вообще всё зависит от архитектуры программы, может быть if else, может быть есть смысл вызывать исключение, которое будет перехвачено где-то в коде, зависит от ситуации

 

Ссылка на комментарий
Поделиться на других сайтах

  • 2 weeks later...

Спс !

Еще вопрос, чтоб не плодить темы.

В статье http://bablofil.ru/static/analyze/latest_BTC.html,

вы используете и строите график анализа RSI для Binance, я так понимаю что используется Ta-Lib и все те же данные что нужны для MACD, просто пересчитываете еще по формуле RSI. Есть возможность сделать функцией результат RSI и показать эту функцию?

Я нашел в инете подобную, но мне не хватает познаний питона чтоб использовать ее вместе с Вашим ботом для Бинанса, и не совсем понимаю что она вернет:

def relative_strength(prices, n=14):
   """
   compute the n period relative strength indicator
   http://stockcharts.com/school/doku.php?id=chart_school:glossary_r#relativestrengthindex
   http://www.investopedia.com/terms/r/rsi.asp
   """

   deltas = np.diff(prices)
   seed = deltas[:n+1]
   up = seed[seed >= 0].sum()/n
   down = -seed[seed < 0].sum()/n
   rs = up/down
   rsi = np.zeros_like(prices)
   rsi[:n] = 100. - 100./(1. + rs)

   for i in range(n, len(prices)):
      delta = deltas[i - 1]  # cause the diff is 1 shorter

      if delta > 0:
         upval = delta
         downval = 0.
      else:
         upval = 0.
         downval = -delta

      up = (up*(n - 1) + upval)/n
      down = (down*(n - 1) + downval)/n

      rs = up/down
      rsi[i] = 100. - 100./(1. + rs)

   return rsi
Ссылка на комментарий
Поделиться на других сайтах

Вот источник где это брал https://github.com/sammchardy/python-binance/issues/188

убрав мне ненужное останется:

import numpy as np
import matplotlib.pyplot as plt
from binance_api import Binance
bot = Binance(
    API_KEY='',
    API_SECRET=''
)

# offers = bot.depth(
#     symbol='BNBBTC',
#     limit=100
# )
# prices = [float(bid[0]) for bid in offers['bids']]
# prices = np.array(prices)

prices = np.array([0.00061422, 0.00061422, 0.00061593, 0.00061672, 0.0006161,
                   0.00061233, 0.000615, 0.00061305, 0.00061346, 0.00061417,
                   0.00061428, 0.00061418, 0.0006115, 0.00061203, 0.0006125,
                   0.00061295, 0.00061296, 0.00061295, 0.00061242, 0.00061144,
                   0.00060874, 0.00060661, 0.00060512, 0.00060931, 0.000611,
                   0.0006129, 0.00061296, 0.000613, 0.00061138, 0.0006115,
                   0.0006123, 0.0006123, 0.00061288, 0.00061494, 0.000615,
                   0.0006146, 0.00061488, 0.00061399, 0.00061285, 0.0006129,
                   0.0006129, 0.00061291, 0.0006134, 0.00061338, 0.00061355,
                   0.0006139, 0.00061475, 0.0006167, 0.0006158, 0.000617,
                   0.00061638, 0.00061452, 0.0006164, 0.00061641, 0.00061646,
                   0.00061898, 0.0006198, 0.00061818, 0.00061922, 0.00061979,
                   0.00061977, 0.00061924, 0.00061626, 0.00061488, 0.000616,
                   0.000616, 0.00061693, 0.0006165, 0.0006165, 0.00061699,
                   0.00061685, 0.00061687, 0.00061691, 0.000617, 0.00061784,
                   0.00061899, 0.0006177, 0.000617, 0.00061732, 0.0006176,
                   0.0006174, 0.00061739, 0.00061739, 0.00061794, 0.0006185,
                   0.0006185, 0.00061785, 0.00061735, 0.00061743, 0.00061742,
                   0.00061429, 0.0006152, 0.00061451, 0.00061514, 0.0006143,
                   0.000614, 0.0006154, 0.0006148, 0.00061444, 0.00061572])


def relative_strength(prices, n=14):
    """
    compute the n period relative strength indicator
    http://stockcharts.com/school/doku.php?id=chart_school:glossary_r#relativestrengthindex
    http://www.investopedia.com/terms/r/rsi.asp
    """

    deltas = np.diff(prices)
    seed = deltas[:n + 1]
    up = seed[seed >= 0].sum() / n
    down = -seed[seed < 0].sum() / n
    rs = up / down
    rsi = np.zeros_like(prices)
    rsi[:n] = 100. - 100. / (1. + rs)

    for i in range(n, len(prices)):
        delta = deltas[i - 1]  # cause the diff is 1 shorter

        if delta > 0:
            upval = delta
            downval = 0.
        else:
            upval = 0.
            downval = -delta

        up = (up * (n - 1) + upval) / n
        down = (down * (n - 1) + downval) / n

        rs = up / down
        rsi[i] = 100. - 100. / (1. + rs)

    return rsi


rsi = relative_strength(prices)
wins = 80
### rsi

plt.subplot2grid((8, 1), (5, 0))
plt.plot(rsi[-wins:], color='black', lw=1)
plt.axhline(y=30, color='red', linestyle='-')
plt.axhline(y=70, color='blue', linestyle='-')

plt.show()

Вот так как есть показывает RSI, пробовал заменить prices как выше закоментированно, то rsi всегда 0, на любых парах. Всю голову сломал почему когда price вручную прописан все показывает, когда берешь его через api то 0. Так же не понятно как реализовано что тут 14 дней, видно что n=14, тогда список price должен состоять из суточных данных? ))) Чувствую что должно быть не сложно, только запутался ))) По идеи грубо надо if rsi <=30 {можно покупать} if rsi >70 {можно продавать}

Ссылка на комментарий
Поделиться на других сайтах

Вы не тот метод берете, вы берете depth - фактически стакан

А нужно брать klines - свечи за период, и функции на вход давать массив из close значений

Тогда она отработает и вернет текущий индекс RSI, если правильно написана

В талиб тоже самое, 

real = talib.RSI(close, timeperiod=14)

Как для MACD считаете те же значения, не думаю, что тут нужна функция если уже используется ta-lib

Ссылка на комментарий
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...