Бот для Binance

Введение

В этой статье представлен простой бот для торговли на бирже Binance.

Бот создает ордер на покупку, основываясь на средней цене из указанного количества предложений на покупку, после чего отслеживает его. Если ордер не выполнен в течении определенного количества времени, ордер отменяется. Если ордер исполнен, выставляется ордер на продажу с указанным профитом. После исполнения ордера на продажу торговля идет по новому кругу.

Поддерживается торговля по нескольким парам, по умолчанию бот работает с комиссией BNB, но поддерживается так же торговля с обычным видом комиссии.

Об особенностях торговли

Цены и объемы

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

Существует шаг цены – например, для пары NEOUSDT цена должна быть кратной 0.00100000. Нельзя выставить ордер по цене, 0.1234 – можно либо 0.123, либо 0.125.

Существует шаг продаваемых/покупаемых монет – например, для пары NEOUSDT шаг объема 0.001 – поэтому не получится продать или купить 123.45678 – можно либо 123.456, либо 123.457.

Ну, и как везде, нельзя создавать ордера меньше указанного объема.

Эти ограничения находятся можно получать через api-метод exchangeInfo (подробности о работе API Binance тут), нужная информация находится в разделе filters по каждой паре. Для цены это tickSize, для объема stepSize в соответствующих структурах данных.

Бот учитывает эти ограничения, но обратите внимание, как меняется цена торгов:

Допустим, вы собираетесь торговать на 11 USDT.

Бот получает цены из стакана – например, 5 цен - [118.753, 118.750, 118.730, 118.712, 118.704]. Берет среднюю -  118,7298. Т.к. минимальный шаг цены 0.001, то берется цена 118,729 (в нижнюю сторону).

После этого бот вычисляет количество валюты, которое можно купить по этой цене – делит 11 USDT на 118,729, получает 0,092648. Т.к. минимальный шаг по монетам 0.001, то выбирается количество 0,092.

В итоге бот покупает 0.092 NEO по курсу 118,729 – и итоговая сумма торгов составит 10,923068. Это меньше, чем указано в настройках, но бот вынужден подстраиваться под требования биржи.

При продаже бот будет продавать так, чтобы получить 10,923068 + нужный процент профита.

Комиссии

У бинанса своя система взимания комиссии. Точнее, их две. По умолчанию, используется такой вид комиссии – неважно, по какой паре вы торгуете, комиссия списывается с вашего счета в валюте BNB. BNB – это собственная валюта Binance, подробнее я расскажу о ней отдельно, но суть такая:

Вы, например, торгуете NEO-USDT. Совершаете покупку по курсу X, рассчитывая купить Y монет NEO и потратить Z USDT. Вы выставляете ордер, он исполняется, и вы получаете Y монет NEO, потратив Z USDT. Вы, как бы, ничего не потеряли на этих торгах – но с вас списалось S монет BNB.

В общем-то, это хорошо – потому что Binance даёт скидку. Оплачивая комиссию через BNB, вы платите на 50% меньше. Теоретически, если комиссия 0.1%, то оплачивая комиссию таким образом, вы платите 0.05% с каждой сделки. Бот рассчитан в первую очередь на такую комиссию, и рекомендуется использовать именно её. Если вдруг вы хотите торговать с обычным видом комиссии, то зайдите в свой профиль и переключите флажок:

После этого в боте нужно будет поменять переменную

USE_BNB_FEES = True

На

USE_BNB_FEES = False  

Правда, я не вижу, зачем бы вам это делать. В любом случае, если вы раньше не торговали на Binance, то первым делом нужно прикупить немного BNB. Прикупить, и пусть лежат. Если вы, тем более, будете торговать с базовой парой BNB, вам это будет на руку.

Как лучше пользоваться ботом

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

Такой вывод вы можете сделать, либо используя индикаторы, либо новости – например, если валюту добавили на биржу, скорее всего она первое время будет расти. Если IBM решил вложиться в Etherium, скорее всего эфир будет расти. Если MACD и RSI показывают сигналы к покупке, скорее всего будет расти, и т.п.

Выбрав пару для торгов, вы останавливаете бота (если запущен), и добавляете пару в конфиг, вот так:

"""
    Пропишите пары, на которые будет идти торговля.
    base - это базовая пара (BTC, ETH,  BNB, USDT) - то, что на бинансе пишется в табличке сверху
    quote - это квотируемая валюта. Например, для торгов по паре NEO/USDT базовая валюта USDT, NEO - квотируемая
"""
pairs = [
     {
        'base': 'USDT',
        'quote': 'BTC',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 11,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'USDT',
        'quote': 'NEO',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 11,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    }
]

Пар можно добавлять любое количество, угрозу бана это не спровоцирует, просто отдельные пары будут реже проверяться, но ответы сервера тут шустрые, так что это особо не скажется на производительности.

Если же вы думаете, что ситуация становится опасной, и пора бы прекратить торги, то дождитесь, когда бот выставит ордер на продажу, остановите бота, и удалите пару из конфигурации. Бот продолжит отслеживать ордер на продажу, но новых покупок создавать не будет.

Если вы отменили ордера или что-то еще сделали на бирже, но бот «запомнил» и теперь проверяет несуществующие ордера, у вас есть два варианта:

  1. Удалите файл binance.db из папки с ботом. Это вынудит бота начать всё с чистого листа, и он начнет работать с нуля по всем парам из конфигурации. Открытые ордера на бирже пропадут из его надзора, и вам нужно будет разрешить их судьбу самостоятельно.
  2. Если вы не хотите терять открытые ордера по другим парам, то откройте файл binance.db с помощью программы SQLiteStudio, Вы запустите программу, добавите базу данных через обзор, там откроете таблицу orders и удалите оттуда только нужный ордер. Кстати говоря, т.к. бот записывает все свои покупки и продажи, с помощью этой программы вы можете выгружать историю торгов бота в Excel и анализировать.

Реклама


Установка и запуск

  1. Зарегистрироваться на Binance (если еще не сделали, вот инструкция)
  2. Пополнить баланс
  3. Убедиться, что на балансе есть BNB (если нет, докупить чуток)
  4. Получить API-ключи (инструкция). Потребуется включить двухфакторную авторизацию, я советую использовать SMS, но можно и Google Authenticator.
  5. Установить Python версии 3.6 и выше. Прямую ссылка на скачивание я не указываю, т.к. к моменту прочтения статьи все может измениться, вам нужно зайти на официальный сайт по ссылке https://www.python.org/downloads/, скачать и установить Python 3.6 и выше (кнопка слева). При установке поставьте все галочки. В идеале, выберите расширенный режим установки (advanced) и поставьте все галки там – нужны будут права администратора.
  6. Скачать архив с ботом.
  7. Распаковать в любую директорию на компьютере
  8. Запустить файл setup.bat – установятся нужные модули (для надежности, запустите и так, и от имени администратора)
  9. Открыть файл binance_bot.py в текстовом редакторе и прописать API-ключи и настройки (об этом ниже)
  10. Запустить файл run.bat – запустится бот и начнет зарабатывать деньги.

Остановить бота можно закрыв окно крестиком.


Реклама


Настройка

Настроек не так много, в API_KEY и API_SECRET нужно прописать ключи, которые вы получили на бирже.

В пары нужно прописать соответственно пары, на которые планируете торговать, максимальную сумму, которую планируете тратить, и желаемый процент прибыли. С этим есть некоторый момент, т.к. вы платите комисиию BNB. Я советую ставить 0.003 (0.3%) и выше, но если у вас есть возможность дешево получать BNB, то можно и меньше.

BUY_LIFE_TIME_SEC – через сколько отменять ордер на покупку (если он не исполнен), в секундах.

STOCK_FEE – комиссия биржи, если вдруг решите торговать без BNB.

USE_BNB_FEES = True – если торгуете с BNB, False – в противном случае.


Реклама


ВСЁ!

Я гонял этого бота несколько дней, меня не забанили, я немного увеличил количество USDT – так что я со спокойной душой передаю вам бота и его исходный код. Вы можете модифицировать его под свои нужды, или обратиться за доработкой.

Я желаю вам хороших заработков, если в процессе эксплуатации будут выявлены какие-то проблемы, или возникнут вопросы, смело пишите в комментарии или лично мне, контакты есть в профиле.


Это статья из цикла "Популярно о бирже"
Все статьи цикла:

Последнее изменение:

Не забудьте рассказать друзьям об этой статье.
Чтобы поддержать ресурс Bablofil достаточно просто поделиться с друзьями этой статьей в социальных сетях. Каждый репост - это самая высокая оценка качества материала. Спасибо, что читаете этот блог.



Комментарии
14.02.2018 23:57:51
архив с ботом не доступен... сервер отвечает 404...
Проголосовать Проголосовать
0 0
15.02.2018 04:41:53
у меня так же сервер не отвечает
Проголосовать Проголосовать
0 0
15.02.2018 06:44:06
Спасибо, обновил ссылку
Проголосовать Проголосовать
0 0
15.02.2018 14:14:08
Добрый день Андрей!
Внимательно слежу за ваши ботами. Визуально выделил три стадии эволюции:
1. Простой бот
2. С индикатором
3. С индикатором и плавающей ценой продажи.
Пробовал все три вида + небольшие доработки. У всех трёх ботов есть общий недостаток - возможность зависания на верхах. Связано это с тем, что прибыль фиксируется на продажи с учётом двух комиссий за покупку и продажу. Для этого нужен хороший тренд вверх.
Есть идея - сделать бота с индикатором и закладывать комиссию и в покупку и продажу + прибыль. При определении цены покупки/продажи отталкиваться от предыдущей цены сделки + комиссию + прибыль. Соответственно тренд на повышение/уменьшение нужен будет меньше. Интересует ваше мнение на этот счёт. Не собираетесь ли вы реализовать нечто подобное?
P.s. спасибо вам за выложенных ботов.
Проголосовать Проголосовать
0 0
15.02.2018 15:46:11
Добрый день.
Самый первый бот для Эксмо торгует именно по такой логике - он снижает цену при покупке, делая покупки реже, но зато не так сильно завышает цену продажи, т.к. она уменьшается на размер комиссии.
Кому-то это нравится, кому-то нет. Кто-то хочет покупать по цене продажи, кто-то готов торговать до упора, а последний лот продавать в минус. Лично мне нравится, но я стараюсь держать код максимально простым, что бы каждый мог разобраться, а иногда даже достичь желаемого, поправив всего пару строчек.
Проголосовать Проголосовать
0 0
15.02.2018 16:24:38
В первом боте опять же закладывается логика продажи включая две комиссии и навар. Что опять приводит к рискам застрять на верхах (купили чуть дешевле при активном падении). А я говорю о возможности брать последнию сделку с нее брать цену. Новая цена следующей сделки = цена последней сделки + процент комиссии за одну операцию + навар. С учётом индикаторов такой бы бот работал более сбалансировано. Как думаете?
Проголосовать Проголосовать
0 0
17.02.2018 00:38:48
допустим валюта 'base': 'BTC'   = программа не работает со значением менее 1, например 0.00337656... т.е. торговать имея сумму менее 548 000 р. по текущему курсу, не возможно...
Проголосовать Проголосовать
0 0
17.02.2018 10:20:18
Такое могло быть на некоторых парах, сейчас изменил алгоритм и обновил архив с ботом, скачайте по новой.
Проверил, торгуя по паре BTCXVG на макс. сумму 0.0015BTC. Создался ордер на покупку по курсу 0.00000764 на 196 XVG на сумму 0.00149744, потом прошла продажа 196 XVG по курсу 0.00000768 на сумму 0.00150528
Проголосовать Проголосовать
0 0
17.02.2018 19:52:48
при запуске run выдает такой текст, питон установлен

"python" не является внутренней или внешней
командой, исполняемой программой или пакетным ф
Для продолжения нажмите любую клавишу . . .
Проголосовать Проголосовать
0 0
18.02.2018 06:39:06
Переустановите питон, и поставьте вообще все галочки, даже зайдите в расширенную установку и там поставьте тоже, все заработает.
Если вкратце, питон должен быть добавлен в переменную окружения PATH, вы можете прописать его туда сами без переустановки. Так же вы можете открыть run.bat в блокноте, и поменять python на полный путь к файлу python.exe - C:\Users... Но проще переустановить и все сделается само
Проголосовать Проголосовать
0 0
20.02.2018 22:07:54
всё надеялся, что будут комменты об успехах, так и не дождался... у меня не работает, пишет :[DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1519162472623&signature;=6fb44960a5f9358e546271db2f9e5a5fc4e728b6a9a3edeb55de6a1ae461b530 HTTP/1.1" 400 None  [WARNI] 'balances'   ... выставлено ===> 'base': 'BTC', 'quote': 'LTC', 'spend_sum': 0.01... баланс присутствует, в чём может быть дело???
Проголосовать Проголосовать
0 0
21.02.2018 06:21:28
Во времени.
Биржа очень чувствительна ко времени, поэтому если у вас не настроена автоматическая синхронизация, то торговать вы не сможете.
Так же может влиять часовой пояс..
Откройте ссылку https://api.binance.com/api/v1/exchangeInfo, там в самом верху есть "serverTime":1519193631348 - текущее время сервера. В вашем коде выше есть timestamp - /api/v3/account?timestamp=1519162472623 - текущее время компа.
Надо, что бы они не расходились более чем на 5000, причем на стороне компа время должно быть меньше чем серверное.
Добиться этого можно либо изменяя часовой пояс, либо в файле binance_api поменять строку
payload.update({'timestamp': int(time.time() * 1000)})
на
payload.update({'timestamp': int((time.time()-1*60*60) * 1000)})
где -1 - это кол-во часов разницы, нужно поменять на -2, +2 и т.п. по ситуации.
Я подумаю, как сделать так, что бы это все проходило автоматически.
Проголосовать Проголосовать
0 0
22.02.2018 23:40:53
мучился пару дней, но так и не смог загнать в необходимое значение... ни подвод часов, ни смена часового пояса не дало результата... изменения носили скачкообразый результат много больше необходимого... миниму 20000 разницы, меньше никак... больно уж сложно получается настроить!!!
Проголосовать Проголосовать
0 0
25.02.2018 07:34:46
Скачайте архив с нуля, я добавил пару интересных вещей для работы со временем
Проголосовать Проголосовать
0 0
25.02.2018 12:28:19
всё то же самое, а архив точно обновлён???
Проголосовать Проголосовать
0 0
25.02.2018 12:31:50
возможно страница не успела обновится... попробую позже.
Проголосовать Проголосовать
0 0
21.02.2018 07:13:07
Добрый день.Не могу запустить бот.Вроде все проделлал.Однако при запуске run выдает ошибку.
Проголосовать Проголосовать
0 0
21.02.2018 07:35:01
Добрый день.
Какую ошибку?
Вы пробовали запускать setup от имени администратора?
Проголосовать Проголосовать
0 0
21.02.2018 17:22:35
Не могу запустить бота.при нажатии на последний пункт.(Запустить файл run.bat  запустится бот и начнет зарабатывать деньги.)
Не является приложением exАндре можете ли Вы сделать бота для Binanca  в формате EXE. Типа вроде как EVOLUTION BOT для Exmo.(http://good-technology.ru/) Наподобие аналога.
Проголосовать Проголосовать
0 0
25.02.2018 07:31:34
Добрый день.
Переустановите питон и установите все галки при установке.
Если делать exe то людям будет сложнее настраивать бота под себя, смотреть код и т.п.
Проголосовать Проголосовать
0 0
22.02.2018 16:55:36
у меня тоже к сожалению выдает ошибку связанную со временем
Проголосовать Проголосовать
0 0
22.02.2018 19:25:28
пытался время подогнать, теперь новая ошибка : starting new HTTPS connection <1>: api.binance.com
Проголосовать Проголосовать
0 0
22.02.2018 19:27:52
2018-02-23 04:27:33,460 [DEBUG] Получаем все неисполненные ордера по БД
2018-02-23 04:27:33,467 [DEBUG] Неисполненных ордеров в БД нет
2018-02-23 04:27:33,475 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-02-23 04:27:33,488 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['NEOUSDT', 'NEOBTC']
2018-02-23 04:27:33,504 [DEBUG] Работаем с парой NEOUSDT
2018-02-23 04:27:33,515 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-02-23 04:27:34,598 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1519327653513&signature;=b67618ef7a9c86bf4111d064b8218a39e3b8402ae1156b624999769af3e64c80 HTTP/1.1" 400 None
2018-02-23 04:27:34,652 [WARNI] 'balances'
2018-02-23 04:27:34,669 [DEBUG] Получаем все неисполненные ордера по БД
2018-02-23 04:27:34,689 [DEBUG] Неисполненных ордеров в БД нет
2018-02-23 04:27:34,706 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-02-23 04:27:34,745 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['NEOUSDT', 'NEOBTC']
2018-02-23 04:27:34,768 [DEBUG] Работаем с парой NEOUSDT
2018-02-23 04:27:34,786 [DEBUG] Starting new HTTPS connection (1): api.binance.com
Проголосовать Проголосовать
0 0
25.02.2018 07:32:24
Скачайте архив по новой, там многое изменено
Проголосовать Проголосовать
0 0
24.02.2018 17:20:05
Неплохо было бы ловить пампы)
Проголосовать Проголосовать
0 0
04.03.2018 00:02:25
Ошибочно щитывает баланс - типа нехватает минимальной суммы 10 USDT. Биткойны тоже недощитывает.
Проголосовать Проголосовать
0 0
05.03.2018 20:33:17
Это не ошибочно, это от биржи идет - приходится покупать меньше и тратить меньше, что бы соблюдать шаги цены и объема. В общем, если бот не продал/купил, то и руками не выйдет по тем же ценам на те же суммы
Проголосовать Проголосовать
0 0
04.03.2018 08:12:25
Добрый день. Подскажите пожалуйста, как решить проблему зависания на верхах, если тренд пошел вниз? Может добавить параметр который будет указывать вершину выше которой ставки не делать или параметр отслеживающий откат и продающий с небольшим минусом? Подскажите плиз, т.к. приходится все время следить, чтобы не зависнуть на верхах.
Проголосовать Проголосовать
0 0
26.04.2018 08:50:03
Добрый день!
Один из способов решения - https://bablofil.ru/weighted-average/
Проголосовать Проголосовать
0 0
04.03.2018 08:14:53
Еще один вопрос, подскажите где еще можно взять боты для binance, т.к. я чайник в программировании приходиться искать готовые боты...
Проголосовать Проголосовать
0 0
26.04.2018 08:48:39
Добрый день!
Бот выложен тут https://bablofil.ru/bot-dlya-binance/
Проголосовать Проголосовать
0 0
04.03.2018 19:55:54
API_KEY=''VojrXv5CNuLджтэждрькждээавлbjuS4Yr,'
SyntaxError: invalid syntax                                         *

Доброго времени суток, не могу запустить, прописал апи ключи, запускаю: вот эту ошибку выдает
Проголосовать Проголосовать
0 0
04.03.2018 19:57:06
с указанием на последнюю букву в ключе
Проголосовать Проголосовать
0 0
05.03.2018 20:31:16
Добрый день, у вас кавычки разные
Проголосовать Проголосовать
0 0
06.03.2018 04:51:07
Блок схему не приложите, трудновато разобраться в коде без схемы.
Проголосовать Проголосовать
0 0
06.03.2018 06:49:03
2018-03-06 12:09:23,867 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1520312926000&signature;=e40ba12078d44768200a01551ae0cbec2a29b54ff821627bc01ff140fb9e11bf HTTP/1.1" 200 None
При том шапка лога выглядит вот так:
2018-03-06 13:47:46,050 [DEBUG] 
    Текущее время: 2018-03-06 13:47:44 1520318864
    Время сервера: 2018-03-06 13:47:09 1520318829
    Разница: 35.00000000 ТЕКУЩЕЕ ВРЕМЯ ВЫШЕ
    Бот будет работать, как будто сейчас: 2018-03-06 13:47:09 1520318829
То есть проблема не во времени.
Проголосовать Проголосовать
0 0
26.04.2018 08:47:23
Не видел комментария, сорри. Блок-схема примерно как для бота полоникса, вот https://bablofil.ru/media/uploads/2017/06/06/pol.png
Проголосовать Проголосовать
0 0
06.03.2018 08:32:50
По поводу ошибки тупанул, код 200 HTTP говорит о том что все ОК. =)
Проголосовать Проголосовать
0 0
07.03.2018 09:13:49
Добрый день! Вопрос такой: можно ли настроить этого бота так, чтобы он просто открывал ордера? Т.е. по моему требованию. Нужно ручное управление счётом инвестора через API биржи для торговли внутри дня.
Проголосовать Проголосовать
0 0
19.03.2018 15:28:09
Добрый день!
Можно, но проще под свою задачу несколько строчек написать
Смотрите примеры тут https://bablofil.ru/binance-api/ (как создавать ордера, как получать курсы и т.п.)
Проголосовать Проголосовать
0 0
12.03.2018 14:59:52
Добрый день,
я дилетант и как обычно пробовал делать, как мне казалось, по Вашей инструкции здесь.
После установки Python, установил бот, но почему-то после корректировки binance_bot.ru и запуска setup.bat под IDLE (Python) никаких настроек не появляется и соответственно после запуска run.bat тоже ничего не происходит, кроме появле в IDLE слдеующего сообщения -
Python 3.6.4 (v3.6.4:d48ecebad5, Dec 18 2017, 21:07:28) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> WARNING: The version of Tcl/Tk (8.5.9) in use may be unstable.
Visit http://www.python.org/download/mac/tcltk/ for current information.

Возможно-ли диагностировать проблему или необходимо устанавливать более рабоспособную (предыдущую) версию PYTHON?
Спасибо, если не устали отвечать на вопросы дилетантов.
Юрий
Проголосовать Проголосовать
0 0
19.03.2018 15:30:13
Что то вы не так делаете.. Сложно сказать. И файл binance_bot.ru должен быть binance_bot.py, может дело в этом?
Проголосовать Проголосовать
0 0
18.03.2018 11:36:28
Добрый день Андрей.

2018-03-18 14:30:49,624 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-03-18 14:30:50,436 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1521372649000&signature;=7b32395eeb159920cd56a6d25aaa8a237368c3fd3d601b4044c3b09b13dec570 HTTP/1.1" 200 None
2018-03-18 14:30:50,436 [DEBUG] Баланс ['BTC:0.00000021', 'USDT:0.00693251']
2018-03-18 14:30:50,436 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-03-18 14:30:51,245 [DEBUG] https://api.binance.com:443 "GET /api/v1/depth?symbol=BTCUSDT&limit;=10 HTTP/1.1" 200 None

Одна ошибка недостаточно средств. А на что ещё ругается?
Спасибо.
Проголосовать Проголосовать
0 0
19.03.2018 15:31:20
Добрый день.
Я не вижу ошибок, обычные отладочные сообщения, кажется, все в порядке
Проголосовать Проголосовать
0 0
24.03.2018 15:31:15
2018-03-24 18:26:42,515 [DEBUG]
    Текущее время: 2018-03-24 18:26:41 1521905201
    Время сервера: 2018-03-24 18:26:40 1521905200
    Разница: 1.00000000 ТЕКУЩЕЕ ВРЕМЯ ВЫШЕ
    Бот будет работать, как будто сейчас: 2018-03-24 18:26:40 1521905200

2018-03-24 18:26:42,515 [DEBUG] Получаем все неисполненные ордера по БД
2018-03-24 18:26:42,515 [DEBUG] Получены неисполненные ордера из БД: ['6629766',
 '20925449']
2018-03-24 18:26:42,515 [DEBUG] Starting new HTTPS connection (1): api.binance.c
om
2018-03-24 18:26:43,484 [DEBUG] https://api.binance.com:443 "GET /api/v3/order?s
ignature=d0d5af1430718244aa5847cdf1c3730f4df845a9322949d9fed7ec787fdbfaf6&symbol;
=WAVESBTC&timestamp;=1521905200000&orderId;=6629766 HTTP/1.1" 400 None
2018-03-24 18:26:43,500 [ERROR] {"code":-1022,"msg":"Signature for this request
is not valid."}
Traceback (most recent call last):
  File "./binance_bot.py", line 151, in <module>
    stock_order_data = bot.orderInfo(symbol=orders_info[order]['order_pair'], or
derId=order)
  File "C:\Python34\binance\binance_api.py", line 47, in wrapper
    return self.call_api(**kwargs)
  File "C:\Python34\binance\binance_api.py", line 75, in call_api
    raise Exception(response.text)
Exception: {"code":-1022,"msg":"Signature for this request is not valid."}

Подскажите, в чём проблема? Точнее их несколько. причем иногда бот запускается без ошибок и создает ордера. А иногда вот так. Баланса хватает, и открытых ордеров нет.</module>
Проголосовать Проголосовать
0 0
27.03.2018 17:26:58
Загадочная история.. Может быть, несколько ботов одновременно торгуют, и отправляют одни и те же запросы время от времени?
Проголосовать Проголосовать
0 0
30.03.2018 17:26:27
Нет. Бот однозначно один. При включении несколько минут (1-5) работает нормально, а потом начинается этот цикл. Также бывает, что после отмены или создания ордера такое начинается.
Скажите, как уменьшить частоту запросов бота к бирже? Может срабатывает защита самой биржи?
Проголосовать Проголосовать
0 0
31.03.2018 14:04:25
Вы можете открыть файл binance_api.py, и перед строкой
response = requests.request(method=self.met.....
Добавить 
time.sleep(1.5) # Ждать полторы секунды
Не забудьте слева сделать такое же кол-во отступов
Защита биржи по другому проявлялась бы.
Тут недавно binance добавляли балансировку нагрузки, возможно вас перебрасывает с сервера на сервер. Я вносил некоторые изменения в код, попробуйте скачать по новой, мало ли
Проголосовать Проголосовать
0 0
25.03.2018 14:58:26
Можно задать вопрос? При создании нового ордера из списка работаем сразу с pair_name и pair_obj
  for pair_name, pair_obj in all_pairs.items()
Совсем не понимаю для чего они оба, объясните пожалуйста.
Проголосовать Проголосовать
1 0
27.03.2018 17:31:08
Первое - это просто строка, которая по сути является ключом словаря.
Второе - это непосредственно сам словарь.
Допустим, мы создадим словарь словарей такого вида
 o = {'q':{'qq':11}, 'w':{'ww':12}}
и запустим такой код:
for pair_name, pair_obj in o.items():
    print(pair_name, pair_obj)

На выходе получим
q {'qq': 11}
w {'ww': 12}
Такие вот разные вещи
Проголосовать Проголосовать
0 0
28.03.2018 18:04:31
Доброго дня, Андрей в программировании полный НОЛЬ. Но стал немного читать ваш код... Возможно стал чуть чуть понимать работу программы...
Случилась беда с ботом, он стал материться в слух во весть экран вот таким вот циклом *:))) я не могу ничего понять что ему нужно?

KeyError: 'ADAETH'
2018-03-28 20:40:15,309 [DEBUG] Получаем все неисполненные ордера по БД
2018-03-28 20:40:15,309 [DEBUG] Получены неисполненные ордера из БД: ['14053312']
2018-03-28 20:40:15,309 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-03-28 20:40:15,709 [DEBUG] https://api.binance.com:443 "GET /api/v3/order?symbol=ADAETH&orderId;=14053312&timestamp;=1522258815000&signature;=7e2be5faf86087feadeb1bdc709314838a3ec20b58bbc4978f93f51dced6d12b HTTP/1.1" 200 None
2018-03-28 20:40:15,709 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-03-28 20:40:15,709 [ERROR] 'ADAETH'
Traceback (most recent call last):
  File "./binance_bot.py", line 350, in <module>
    del all_pairs[row[0]]
KeyError: 'ADAETH'
2018-03-28 20:40:15,709 [DEBUG] Получаем все неисполненные ордера по БД
2018-03-28 20:40:15,725 [DEBUG] Получены неисполненные ордера из БД: ['14053312']
2018-03-28 20:40:15,725 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-03-28 20:40:16,115 [DEBUG] https://api.binance.com:443 "GET /api/v3/order?symbol=ADAETH&orderId;=14053312&timestamp;=1522258815000&signature;=7e2be5faf86087feadeb1bdc709314838a3ec20b58bbc4978f93f51dced6d12b HTTP/1.1" 200 None
2018-03-28 20:40:16,115 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-03-28 20:40:16,115 [ERROR] 'ADAETH'
Traceback (most recent call last):
  File "./binance_bot.py", line 350, in <module>
    del all_pairs[row[0]]
KeyError: 'ADAETH'
2018-03-28 20:40:16,115 [DEBUG] Получаем все неисполненные ордера по БД
2018-03-28 20:40:16,115 [DEBUG] Получены неисполненные ордера из БД: ['14053312']
2018-03-28 20:40:16,115 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-03-28 20:40:17,045 [DEBUG] https://api.binance.com:443 "GET /api/v3/order?symbol=ADAETH&orderId;=14053312&timestamp;=1522258816000&signature;=cd6982ba4cd20691977a6e7652fef0a682a16e4183e2c585ae6a3d12613e56a6 HTTP/1.1" 200 None
2018-03-28 20:40:17,045 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-03-28 20:40:17,045 [ERROR] 'ADAETH'
Traceback (most recent call last):
  File "./binance_bot.py", line 350, in <module>
    del all_pairs[row[0]]

Бот стал ругаться я стал проверять... В личном кабинете на БИНАНС нет неисполненых ордеров 'ADAETH' и не было в истории торгов.

Пары в файле стоят вот такие:

pairs = [
{
        'base': 'BTC',
        'quote': 'ONT',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.001,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.01, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    }, {
        'base': 'ETH',
        'quote': 'ONT',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.001,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.01, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)
		
    }, {
        'base': 'BNB',
        'quote': 'ONT',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.1,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.01, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)
		
	}, {
        'base': 'USDT',
        'quote': 'BTC',
        'offers_amount': 5, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 10,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.01, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)
		}

    ]

Блок 348-351 строк вот такой вот:

# Получаем из базы все ордера, по которым есть торги, и исключаем их из списка, по которому будем создавать новые ордера
        for row in cursor.execute(orders_q):
            del all_pairs[row[0]]

И вот сижу я и мозг ломаю, то ли лыжи не едут, то ли асфальт слишком шершавый... =*:)))
Помогите начинающему лузеру пожалуйста...
P.S. https://www.youtube.com/watch?v=rt4ebMu6_aM </module></module></module>
Проголосовать Проголосовать
1 0
29.03.2018 07:05:30
Значит было. У вас в базе данных есть запись. Как вариант удалите файл binance.db из папки с ботом, тогда он с чистого листа начнет
Проголосовать Проголосовать
0 0
29.03.2018 12:52:04
спасибо, вчера дорулил - так и сделал и всё взлетело... теперь пробую настраивать....
Проголосовать Проголосовать
0 0
25.04.2018 19:51:44
интересно, какие настройки под какие временные значения?
Проголосовать Проголосовать
0 0
26.04.2018 10:20:15
Вы о чем?
Проголосовать Проголосовать
0 0
29.04.2018 15:12:06
У вас в настройках есть такое( Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000) например берём значение 10 и на каком временном графике можно любоваться на свечи, мысленно подталкивая их в верх) или не имеет значения? просто так сказать визуализация работы в картине)
Проголосовать Проголосовать
0 0
11.05.2018 17:43:57
Аа, ну это вопрос стратегии.. На 5 сделках курс может падать а на 1000 расти и наоборот, наверное стоит прикинуть сколько сделок в среднем совершается за нужный период на нужной паре
Проголосовать Проголосовать
0 0
01.05.2018 19:50:12
Здравствуйте!
Вопрос от новичка: запускаю бот под Ubuntu, работает, ордеров не создает, и постоянно такое сообщение об ошибке:

2018-05-01 19:42:59,298 [DEBUG] "GET /api/v3/account?signature=2eed0ecccd40a0e6c51b57bb5211557cf812c459bd8e0d2fe88f367a3bd67a17&timestamp;=1525203778000 HTTP/1.1" 400 None
2018-05-01 19:42:59,301 [ERROR] {"code":-1022,"msg":"Signature for this request is not valid."}


Пробовал сделать как советовали выше:
"Вы можете открыть файл binance_api.py, и перед строкой
response = requests.request(method=self.met.....
Добавить 
time.sleep(1.5) # Ждать полторы секунды
Не забудьте слева сделать такое же кол-во отступов"

-- Не помогает.
Заранее благодарю за помощь.
Проголосовать Проголосовать
1 0
12.05.2018 15:34:01
Почему то именно на убунте такая история, я, к сожалению, пока не знаю в чем дело, причем иногда работает а иногда нет, бывает, что первый запрос отработал а второй уже нет.
Проголосовать Проголосовать
0 0
07.05.2018 22:19:33
Здравствуйте Андрей! К сожалению у меня тоже не работает. Если можете помогите пожалуйста разобраться.
Текущее время: 2018-05-08 01:09:51 1525730991
    Время сервера: 2018-05-08 01:10:08 1525731008
    Разница: 17.00000000 
    Бот будет работать, как будто сейчас: 2018-05-08 01:10:08 1525731008

2018-05-08 01:10:08,267 [DEBUG] Получаем все неисполненные ордера по БД
2018-05-08 01:10:08,267 [DEBUG] Неисполненных ордеров в БД нет
2018-05-08 01:10:08,267 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-05-08 01:10:08,267 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['BTCUSDT']
2018-05-08 01:10:08,267 [DEBUG] Работаем с парой BTCUSDT
2018-05-08 01:10:09,773 [INFO ] Starting new HTTPS connection (1): api.binance.com
2018-05-08 01:10:15,336 [DEBUG] "GET /api/v3/account?timestamp=1525734608268&signature;=6c840f1f8eb8272bea146f55b1af986c338f06fb6f5319c9010919e03b9a3937 HTTP/1.1" 400 None
2018-05-08 01:10:15,338 [ERROR] {"code":-1021,"msg":"Timestamp for this request was 1000ms ahead of the server's time."}

Перечитал выше и тоже менял по Вашему совету:

Вы можете открыть файл binance_api.py, и перед строкой
response = requests.request(method=self.met.....
Добавить 
time.sleep(1.5) # Ждать полторы секунды
Не забудьте слева сделать такое же кол-во отступов"

Добиться этого можно либо изменяя часовой пояс, либо в файле binance_api поменять строку
payload.update({'timestamp': int(time.time() * 1000)})
на
payload.update({'timestamp': int((time.time()-1*60*60) * 1000)})
где -1 - это кол-во часов разницы, нужно поменять на -2, +2 и т.п. по ситуации.

Ничего не получается. Заранее спасибо.
Проголосовать Проголосовать
0 0
09.05.2018 12:27:19
Проблема с зависанием на верхах прямо критическая. Есть ли варианты со стоплоссом.
Пример: после покупки бот создает не лимит-ордер, а стоп-лосс ордер (например 5,10,15,%), но в памяти сохраняет желаемую цену продажи (например 3,5,10%) и когда цена доходит до отметки продажи -+ 0.5-1%, меняет стоплос на лимит ордер. вот как то так. либо просто меняет стоплос на цену продажи. потому что на верхах можно не хило залететь если не сидеть у монитора, даже если цена растет.
Проголосовать Проголосовать
0 0
09.05.2018 12:35:39
P.S да и еще желательно сделать промежуток по времени между покупками хотя бы минуту или 30сек иначе получается, купил по 100 продал +3% = 103, тут же покупает по стакану процент прибыли \ 2 тоесть по 101.5 и ждет следующие 101.5+3% и получается в случае если это последняя макс цена или резкий обвал то минус может быть очень большой в особо волатильных парах.
Проголосовать Проголосовать
0 0
09.05.2018 21:31:09
я наверное целый лист еще написал текста чтобы помочь и интернет вылетел. 2 раз не буду. суть в том что надо чтобы бот выставлял стоплос на продажу а цену продажи держал в голове и выставлял ее за 1-2 тика до края стакана. и сравнивал (или задать как параметр ) начало работы с первым ордером, чтобы работать в 2-4% флэте на высоко-волотильных парах.
Проголосовать Проголосовать
0 0
12.05.2018 15:41:04
А еще можно выставлять стоп-лосс на -2%, например, но при каждом движении цены вверх скажем на 0.2% отменять и ставить stop_loss скажем на -0.3% от текущей, получится трейлинг-стоп)
Проголосовать Проголосовать
0 0
10.05.2018 01:10:37
здравствуйте. Скажите пожалуйста как поправить код, чтобы бот покупал по текущей цене на торгах или текущая цена+0,02%.
Такая проблема что бот всё время ставит цену чуть меньше чем торги и не может ничего купить - только в убыток.
Время вроде проверял.
спасибо
Проголосовать Проголосовать
0 0
12.05.2018 15:46:31
Самое простое, это сделать покупку по рынку...
Найдите в коде
new_order = bot.createOrder(
                            symbol=pair_name,
                            recvWindow=5000,
                            side='BUY',
                            type='LIMIT',
                            timeInForce='GTC',  # Good Till Cancel
                            quantity="{quantity:0.{precision}f}".format(
                                quantity=my_amount, precision=CURR_LIMITS['baseAssetPrecision']
                            ),
                            price="{price:0.{precision}f}".format(
                                price=my_need_price, precision=CURR_LIMITS['baseAssetPrecision']
                            ),
                            newOrderRespType='FULL'
                        )

и замените на

new_order = bot.createOrder(
                            symbol=pair_name,
                            recvWindow=5000,
                            side='BUY',
                            type='MARKET',
                            quantity="{quantity:0.{precision}f}".format(
                                quantity=my_amount, precision=CURR_LIMITS['baseAssetPrecision']
                            )
                        )
Проголосовать Проголосовать
0 0
12.05.2018 22:15:01
добрый день!
Скажите, а как запустить файлы bat если компьютер на macOS?
Проголосовать Проголосовать
0 0
13.05.2018 04:54:58
Вам нужно будет в терминале перейти к папке с ботом, потом выполнить
python3.5 ./binance_bot.py

Вместо python3.5 у вас может быть какой-то другой питон, замените

Также установите модуль requests
pip3 install requests
или
pip install requests
Проголосовать Проголосовать
0 0
13.05.2018 20:07:24
Спасибо за ответ.
а после запустить через python Run python Shell ?
Проголосовать Проголосовать
0 0
14.05.2018 06:56:05
бегает много красных строк, но часто повторяется вот такие. что то не так...

Traceback (most recent call last):
  File "/Users/mityavol/Desktop/binance/binance_bot.py", line 364, in <module>
    raise Exception("Не удалось найти настройки выбранной пары " + pair_name)
Exception: Не удалось найти настройки выбранной пары USDTLTC

пардон за делитантизм </module>
Проголосовать Проголосовать
0 0
13.05.2018 21:08:15
вроде уже разобрался...
а на виртуальную машину реально его поставить?
Проголосовать Проголосовать
0 0
15.05.2018 10:10:13
Это значит что он не может получить информацию с https://api.binance.com/api/v1/exchangeInfo
Проверьте связь, посмотрите что писало в логе (в папке logs)
Проголосовать Проголосовать
0 0
15.05.2018 07:41:55
Да, вполне, для него никакой разницы нет где запускаться
Проголосовать Проголосовать
0 0
15.05.2018 13:33:18
я кажется перепутал местами base и quote )) поменял местами и все заработало.
Проголосовать Проголосовать
0 0
15.05.2018 09:44:11
1) полдня и примерно 250 тыс бегущих строк хватает, чтобы «программа неожиданно завершила свою работу» :) На digitalocean такое тоже происходит, не знаете? 

2) По вашему опыту сколько времени требуется чтобы бот показал результат? А то уже третий день идет, а пока наторговал немного в минус. может у меня что то не так с параметрами в парах?

'base': 'BTC',
        'quote': 'IOTA',
        'offers_amount': 10, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.005,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'BTC',
        'quote': 'XLM',
        'offers_amount': 10, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.003,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'BTC',
        'quote': 'LTC',
        'offers_amount': 20, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.002,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'BTC',
        'quote': 'TRIG',
        'offers_amount': 20, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.002,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'BTC',
        'quote': 'SNT',
        'offers_amount': 10, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.002,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    },{
        'base': 'BTC',
        'quote': 'OMG',
        'offers_amount': 20, # Сколько предложений из стакана берем для расчета средней цены
                            # Максимум 1000. Допускаются следующие значения:[5, 10, 20, 50, 100, 500, 1000]
        'spend_sum': 0.002,  # Сколько тратить base каждый раз при покупке quote
        'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

    }
Проголосовать Проголосовать
0 0
15.05.2018 11:28:21
Такое ощущение, что у вас что-то кончается, может быть место на жестком, а может быть оперативка, но такого я не замечал. А в код изменения не вносили?
В минус бот торговать в принципе не должен, он выставляет на продажу исходя из цены и кол-ва купленного и навара, даже если текущий курс ниже, он должен выставить по рассчитанному. Вам нужно ориентироваться именно на кол-во монет, а не на примерную стоимость всего портфеля, которую считает binance на странице балансов. А общая результативность зависит от подбора пар, параметров и т.п. С параметрами вроде бы все хорошо.
Проголосовать Проголосовать
0 0
15.05.2018 13:36:42
в коде ничего кроме пар ничего не изменял точно.

может навар с количеством base не сосчитается? комиссию ведь бот учитывает, чтобы профит получился?
Проголосовать Проголосовать
0 0
15.05.2018 19:09:37
Печально что нельзя удалять комментарии - столько чуши написал,нормально не прочитав, что вы пишете.

Есть какие то кричные изменения в настройках пар, что с параметрами было «все плохо»? Эдакий метод от противного
Проголосовать Проголосовать
0 0
13.05.2018 12:05:17
Добрьій день. при запуске бота вот такое происходит:

2018-05-13 14:42:12,600 [DEBUG] Получаем все неисполненные ордера по БД
2018-05-13 14:42:12,600 [ERROR] string indices must be integers
Traceback (most recent call last):
  File "./binance_bot.py", line 143, in <module>
    all_pairs = {pair['quote'].upper() + pair['base'].upper():pair for pair in pairs}
  File "./binance_bot.py", line 143, in <dictcomp>
    all_pairs = {pair['quote'].upper() + pair['base'].upper():pair for pair in pairs}
TypeError: string indices must be integers

Такое повторяется бесконечное множество раз (пока бот запущен).  Запускаю на паре BNB/ETH, на бирже висит ордер на продажу BNB, которьій бьіл вьіставлен руками. Спасибо.</dictcomp></module>
Проголосовать Проголосовать
0 0
13.05.2018 12:17:20
Вопрос снят, набокопорил в настройках пар закомментировав кусочек кода.
Проголосовать Проголосовать
0 0
14.05.2018 14:16:57
здравствуйте) уважаемый а можете сделать чтобы строчки не бежали а то пытаешься разобраться и не успеваешь прочитать аж глаза начинают болеть)
Проголосовать Проголосовать
0 0
15.05.2018 10:08:19
Он пишет не только на экран, но еще и в лог, в папку logs с ботом.
Так что в любой момент можно открыть текстовый файл и обстоятельно всё просмотреть)
Проголосовать Проголосовать
0 0
14.05.2018 17:25:29
ещё такой момент) не может выставить ордер на продажу даже на той паре которая перед этим всё срабатывало((( или что то я не то делаю или не понимаю)
Проголосовать Проголосовать
0 0
15.05.2018 10:08:41
Посмотрите файл лога, там должно быть всё написано
Проголосовать Проголосовать
0 0
21.05.2018 11:46:39
заполнил в файлике ключи оба , без пробелов, но получаю  {"code":-2014,"msg":"API-key format invalid."}  ключи верные, другой бот по ним работает(отключен).
Проголосовать Проголосовать
0 0
21.05.2018 21:39:11
2018-05-22 00:37:31,731 [DEBUG] Работаем с парой ETHXLM
2018-05-22 00:37:31,732 [ERROR] Не удалось найти настройки выбранной пары ETHXLM
Traceback (most recent call last):
  File "./binance_bot.py", line 406, in <module>
    raise Exception("Не удалось найти настройки выбранной пары " + pair_name)
Exception: Не удалось найти настройки выбранной пары ETHXLM


Что бы это могло значить, не подскажете? За 5 минут до этого работало с этой парой, на сколько я помню ничего не менял.
И есть ли ограничения на одновременную работу пары например ETH\XLM и XLM\ETH?</module>
Проголосовать Проголосовать
0 0
22.05.2018 07:59:31
Вопрос снят, продажа автоматически происходит на соответсвующую пару, незачем ставить обратную сделку, протупил немного :)
Проголосовать Проголосовать
0 0
22.05.2018 08:09:32
а можно добавить докуп на спаде и усреднение цены?
Проголосовать Проголосовать
0 0
23.05.2018 06:06:37
Можно
Но я стараюсь выкладывать не слишком перегруженных ботов, что бы любой мог разобраться и прикрутить что ему угодно
Проголосовать Проголосовать
0 0
22.05.2018 15:02:41
постоянно стал ловить ошибку 
Traceback (most recent call last):
  File "./binance_bot.py", line 12, in <module>
    from binance_api import Binance
  File "C:\cwb\binance-trader\hz\binance_api.py", line 5, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'</module></module>
Проголосовать Проголосовать
0 0
23.05.2018 06:05:32
Нужно в командной строке выполнить 
pip install requests
Проголосовать Проголосовать
0 0
22.05.2018 16:29:00
Привет! есть ли возможность юзать несколько этих ботов на одном аккаунте, что бы ордера не пересекались одни и те же? Спасибо!
Проголосовать Проголосовать
0 0
23.05.2018 06:08:58
Да, бот запоминает свои ордера в локальной БД
Если запускать двух ботов (каждого в своей папке) то можно играть на одну и ту же пару, один бот другому мешать не будет
Проголосовать Проголосовать
1 0
28.05.2018 20:35:04
Добрый день!
Получилось ли как-то локализовать проблему с этим:
Signature for this request is not valid
Проголосовать Проголосовать
0 0
01.06.2018 07:57:43
Кстати говоря, да, я обновил код тут и в статье про апи https://bablofil.ru/binance-api/
Проголосовать Проголосовать
0 0
29.05.2018 16:52:59
Добрый день!
Как можно сделать, чтобы бот торговал определенное количество раз. Т.е. не торговал по кругу, а, например, только N-количество раз?
Проголосовать Проголосовать
0 0
01.06.2018 08:30:17
По каждой паре?
Можно например, добавить в параметры после 

'profit_markup': 0.005, # Какой навар нужен с каждой сделки? (0.001 = 0.1%)

параметр 

'max_sell_orders': 20 # Сколько ордеров допускается создавать

Потом, после 
log.debug("Ордер {order} на продажу исполнен".format(
                        order=order
                    ))
                    # Обновляем информацию в БД
                    cursor.execute(
                        """
                          UPDATE orders
                          SET
                            sell_finished = datetime()
                          WHERE
                            sell_order_id = :sell_order_id

                        """, {
                            'sell_order_id': order
                        }
                    )
                    conn.commit()

добавить вычитание исполненного ордера из максимального кол-ва:

                    for i, d in enumerate(pairs):
                        if d['quote'].upper() + d['base'] == orders_info[order]['order_pair']:
                           pairs[i]['max_sell_orders'] = pairs[i]['max_sell_orders'] - 1

После чего добавить перед строкой 
# Если остались пары, по которым нет текущих торгов вот такую строку

all_pairs = {pair['quote'].upper() + pair['base'].upper():pair for pair in pairs if pair['max_sell_orders'] > 0}

На этом всё
Вот так будет выглядеть: https://pastebin.com/v0D9V3nP
Проголосовать Проголосовать
0 0
04.06.2018 18:42:49
С учетом добавки со стоплоссом, добавляем сюда:


# Если это ордер на продажу, и он исполнен
                if order_status == 'FILLED' and orders_info[order]['order_type'] == 'sell':
                    log.debug("Ордер {order} на продажу исполнен".format(
                        order=order
                    ))
                    # Обновляем информацию в БД
                    cursor.execute(
                        """
                          UPDATE orders
                          SET
                            sell_finished = datetime()
                          WHERE
                            sell_order_id = :sell_order_id

                        """, {
                            'sell_order_id': order
                        }
                    )
                    conn.commit()

                # ---------------------------------------------------------------------------------------------
                for i, d in enumerate(pairs):
                    if d['quote'].upper() + d['base'] == orders_info[order]['order_pair']:
                        pairs[i]['max_sell_orders'] = pairs[i]['max_sell_orders'] - 1
                # ---------------------------------------------------------------------------------------------

                if order_status == 'NEW' and orders_info[order]['order_type'] == 'sell':
                  curr_rate = float(bot.tickerPrice(symbol=orders_info[order]['order_pair'])['price'])
                  
                  if (1 - curr_rate/orders_info[order]['buy_price'])*100 >= all_pairs[orders_info[order]['order_pair']]['stop_loss']:
                     log.debug("{pair} Цена упала до стоплосс (покупали по {b:0.8f}, сейчас {s:0.8f}), пора продавать".format(
                        pair=orders_info[order]['order_pair'],
                        b=orders_info[order]['buy_price'],
                        s=curr_rate
                     ))
                     # Отменяем ордер на бирже
                     cancel = bot.cancelOrder(
                       symbol=orders_info[order]['order_pair'],
                          orderId=order
                      )
                     # Если удалось отменить ордер, скидываем информацию в БД
                     if 'orderId' in cancel:

******************************************************************************************************************
или ниже обработки стоплосса:

                 if not new_order.get('code'):
                     log.info("Создан ордер на продажу по рынку " + str(new_order))
                     cursor.execute(
                        """
                          DELETE FROM orders
                          WHERE
                            sell_order_id = :sell_order_id
                        """, {
                            'sell_order_id': order
                        }
                     )
                     conn.commit()
**********************************************************************************
-->>>> сюда
**********************************************************************************
        else:
            log.debug("Неисполненных ордеров в БД нет")

        log.debug('Получаем из настроек все пары, по которым нет неисполненных ордеров')

        orders_q = """
            SELECT
              distinct(order_pair) pair
            FROM
              orders
            WHERE
Проголосовать Проголосовать
0 0
06.11.2018 03:07:37
Тестанул код что под ссылкой. Бот начинает создавать большое количество ордеров по одной и той же паре. Не пойму в чем косяк...
Проголосовать Проголосовать
0 0
01.06.2018 08:59:15
Все-таки вопрос со стоплосом остается открытым. Это прямо охилесова пята, если стоплосс появится то бот имеет смысл ...в остальных случаях он просто загонит в минус. поторговал недельку малыми суммами. бот просто загнал меня на пик свечи. пока это не бот а быстрый калькулятор (не в обиду) . ну или я просто не умею его готовить.
Проголосовать Проголосовать
0 0
01.06.2018 13:20:26
Да не вопрос, залил новый код, теперь в конфиге есть параметр stop_loss и некоторая логика (sell отменяется и продается по рынку если цена упала на указанный % от изначальной цены buy)
Скачайте код бота по новой
Проголосовать Проголосовать
0 0
09.06.2018 07:17:16
2018-06-09 09:42:58,989 [DEBUG] 
    Текущее время: 2018-06-09 09:42:57 1528526577
    Время сервера: 2018-06-09 09:42:58 1528526578
    Разница: 1.00000000 
    Бот будет работать, как будто сейчас: 2018-06-09 09:42:58 1528526578

2018-06-09 09:42:59,098 [DEBUG] Получаем все неисполненные ордера по БД
2018-06-09 09:42:59,098 [DEBUG] Неисполненных ордеров в БД нет
2018-06-09 09:42:59,098 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-06-09 09:42:59,098 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['BNBUSDT', '']
2018-06-09 09:42:59,114 [DEBUG] Работаем с парой BNBUSDT
2018-06-09 09:42:59,114 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-06-09 09:43:00,458 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1528526579000&signature;=6d25310011746a732afffb64f2da7ead0681e27fbf9cf8c3351632a68a6e7a15 HTTP/1.1" 200 None
2018-06-09 09:43:00,474 [DEBUG] Баланс ['BNB:0.45498155', 'USDT:12.81706040']
2018-06-09 09:43:00,474 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-06-09 09:43:01,802 [DEBUG] https://api.binance.com:443 "GET /api/v1/depth?symbol=BNBUSDT&limit;=15 HTTP/1.1" 400 None
2018-06-09 09:43:01,802 [ERROR] 'bids'
Traceback (most recent call last):
  File "./binance_bot.py", line 441, in <module>
    prices = [float(bid[0]) for bid in offers['bids']]
KeyError: 'bids'
2018-06-09 09:43:01,896 [DEBUG] Получаем все неисполненные ордера по БД
2018-06-09 09:43:01,896 [DEBUG] Неисполненных ордеров в БД нет
2018-06-09 09:43:01,911 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-06-09 09:43:01,911 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['BNBUSDT', '']
2018-06-09 09:43:01,911 [DEBUG] Работаем с парой BNBUSDT
2018-06-09 09:43:01,911 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-06-09 09:43:03,913 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1528526581000&signature;=8f889024ba52f7b1eff0e68dc79d1ba5fe0d60ee65680c768aa559a27ea90860 HTTP/1.1" 200 None
2018-06-09 09:43:03,913 [DEBUG] Баланс ['BNB:0.45498155', 'USDT:12.81706040']
2018-06-09 09:43:03,913 [DEBUG] Starting new HTTPS connection (1): api.binance.com</module>
Проголосовать Проголосовать
0 0
09.06.2018 07:18:01
Что делать? Переустановка не помогает.
Проголосовать Проголосовать
0 0
12.06.2018 03:03:12
Стоп лосс это спорный вопрос как можно изменить код чтобы вместо стопа выставлялось несколько ордеров на покупку по методу лесенка
Проголосовать Проголосовать
0 0
10.06.2018 11:01:21
У вас стоит лимит 15, а допустимые значения - 5, 10, 20 и тп
https://api.binance.com/api/v1/depth?symbol=BNBUSDT&limit;=15
Проголосовать Проголосовать
0 0
13.06.2018 07:06:58
Добавил в коде флаг, использовать ли стоп-лосс, по умолчанию нет
Насчет лесенки тоже спорный момент, т.к. много средств простаивает без движения. Для этого много кода нужно переделывать, например нужны настройки - сколько ордеров на покупку, с каким шагом. Нужно при создании ордера на покупку сразу создавать несколько ордеров. При исполнении ордера на покупку и выставления на продажу нужно выставлять еще более дешевый ордер на покупку. При исполнении ордера на продажу нужно отменять все ордера на покупку. При срабатывании ордера на покупку если он второй и дальше по хорошему нужно отменять существующие ордера на продажу и выставлять всё уже купленное по средневзвешенной, что бы ордер на продажу опускался вслед за рынком и т.п.
Но код открытый, вы можете с ним делать что угодно, в том числе и вышеописанное )

Вы можете начать с чего-то простого, например, вот пример изменения, где создаются 5 ордеров на покупку с ниспадающей ценой, каждый раз когда срабатывает бай, создается селл

https://pastebin.com/Rzk5Da0z
Проголосовать Проголосовать
0 0
13.06.2018 23:50:02
Спасибо будем разбираться
Проголосовать Проголосовать
0 0
04.06.2018 09:49:55
Уважаемые. Подскажите пожалуйста стратегию нового бота со стоп лосами)
Проголосовать Проголосовать
0 0
04.06.2018 10:39:47
И ещё, было бы прекрасно, что бы можно можно было выставлять ставку, когда боту начать и перестать торговлю) ти по глянул на индикатор, ага тут лучше купить а там лучше продать и закончить до лучшего входа
Проголосовать Проголосовать
0 0
14.06.2018 10:04:44
День добрый.
Нашел статью 
https://golos.io/ru--kriptovalyuty/@primus/avtomatizirovannaya-torgovlya-altkoinami-na-birzhakh-kriptovalyut-chast-3-primer-prostogo-torgovogo-algoritma
в которой описывается аналогичный метод торговли. В ней приведен способ анализа торгуемых пар для повышения эффективности торговли. Набросал код, позволяющий сортировать пары по этому параметру. Создается файл PairParams, в нем на листе Sorted упорядочены по убыванию пары по столбцу RANK. Берем самые верхние пары для работы.
Вот код, не судите строго, это мои первые шаги в Питоне:
import xlwt # Import `xlwt`         pip install xlwt
book = xlwt.Workbook()  # create xls file
book = xlwt.Workbook(encoding="utf-8")# Initialize a workbook
sheet1 = book.add_sheet("Full_List")  # Add a sheet to the workbook  
sheet2 = book.add_sheet("Sorted")  # Add a sheet to the workbook

from binance_api import Binance 
bot = Binance(
    API_KEY='e...bs',
    API_SECRET='n...G'
    )
SYM='BNBBTC'
INFO = 'ddd'
# INFO = bot.exchangeInfo()                 # Настройки и лимиты биржи - /api/v1/exchangeInfo
# INFO - bot.depth(symbol=SYM,limit=5)      # Открытые ордера (книгa ордеров), limit - кол-во возвращаемых записей от 5 до 1000 
# INFO = bot.trades(symbol=SYM,limit=1)     # Последние (чужие) сделки - /api/v1/trades
# INFO = bot.klines(symbol=SYM, interval='5m', limit=1) # Данные по свечам, limit – кол-во свечей (максимум 500, по умолчанию 500)
# INFO = bot.aggTrades(symbol=SYM, limit=1) # Сжатая история сделок - /api/v1/aggTrades     
# INFO = bot.tickerPrice(symbol=SYM)        # Последняя цена по паре (или парам) 
# INFO = bot.tickerBookTicker(symbol=SYM)   # Лучшие цены покупки/продажи - /api/v3/ticker/bookTicker
INFO = bot.ticker24hr()         # Статистика за 24 часа -  /api/v1/ticker/24hr   Если symbol не указан, возвращаются данные по всем парам

Dict=dict()
for i in range(len(INFO)): # разбиваем список словарей на словари
    Dict[i]=INFO[i]        # создаем новый массив словарей
    INFO[i].update({'SPRED':00})    # добавляем новые
    INFO[i].update({'SPRED/BID':00})# значения к 
    INFO[i].update({'RANK':00})     # нашему словарю

row=0 # столбцы
col=0 # строки
for key in Dict[0]: # перебираем все ключи самого первого словаря (любого) 
    sheet1.write(col,row, key)   # для формирования из них строки с названием столбцов
    row+=1

for col in Dict: # в каждую строку будем записывать содержимое словаря из массива словарей Dict
    row=0 # обнуляем столбец
    for key in Dict[col]: # перебор значений всех ключей в выбранном словаре 
        sheet1.write(col+1,row, Dict[col][key])# построчная запись в xls файл всех значений словаря
        row+=1

for key in INFO:  # расчет оценочных параметров для каждой пары
    key['SPRED'] =   (float(key['askPrice'])-float(key['bidPrice']))
    key['SPRED/BID']=(float(key['askPrice'])-float(key['bidPrice'])) / float(key['bidPrice'])
    key['RANK'] =    (float(key['askPrice'])-float(key['bidPrice'])) / float(key['bidPrice']) * float(key['volume'])
   
Sorted_List=sorted(INFO, key= lambda d: d['RANK'], reverse=True)   # сортировка списка словарей по убыванию 'RANK'
NewRows=['symbol', 'priceChangePercent', 'highPrice', 'lowPrice', 'weightedAvgPrice', 'bidPrice', 'askPrice', 'volume', 'SPRED','SPRED/BID', 'RANK']  # перечень нужных столбцов 

for i in range(len(NewRows)):
    key=NewRows[i] # название столбца
    row=i # столбцы
    col=0 # строки
    sheet2.write(col,row, key) # пишем название столбца
    for j in Sorted_List:
        col+=1
        sheet2.write(col,row, j[key]) # заполняем все строки столбца

book.save("PairsParams.xls")# Save the workbook
Проголосовать Проголосовать
0 0
14.06.2018 11:57:49
Уважаемый Sergey H... а можно по подробнее и ещё бы готовый файл а то я в этом деле не силён) и ещё бы видео если файл очень сложен в настройке и запуске)
Проголосовать Проголосовать
0 0
14.06.2018 13:55:39
весь текст программы я привел, осталось вставить свои АПИ ключи, вставить в файл.ру и все будет работать.
Проголосовать Проголосовать
0 0
14.06.2018 17:25:51
не большое уточнение) вы пишете о боте который с этого сайта в который можно вставить ваше дополнение? Ваш фаил нужно вставить или полностью заменить на ваш фаил. нашёл только эти фаилы (binance_api,   binance_bot,   run,  setup,  logs) просто пробовал всяко разно и вставлял и заменял и бубен хотел покупать) может всё скинете на яндекс диск что бы можно было скопировать?
Проголосовать Проголосовать
0 0
15.06.2018 05:03:59
ок, вот ссылка на файлhttps://yadi.sk/d/Tbi0qTqQ3XuWwU
кидаем его рядом с binance_api,  запускаем, получаем в той же папке экселевский файл. На вкладке Sorted будет список всех пар, упорядоченный по параметру, описанному в статье 
https://golos.io/ru--kriptovalyuty/@primus/avtomatizirovannaya-torgovlya-altkoinami-na-birzhakh-kriptovalyut-chast-3-primer-prostogo-torgovogo-algoritma
Проголосовать Проголосовать
0 0
15.06.2018 10:17:41
так и не могу запустить((( моргнёт и закроется и не какого экселя((( вот если бы вы полностью папку с работающим у вас ботом со всеми файлами заархивировали и на яндекс диск)
Проголосовать Проголосовать
0 0
16.06.2018 06:25:29
Отличная программа! Один вопрос. В программировании я новичок. Что надо добавить в код, чтобы увидеть строки информации номера ордера и торгуемой пары вместе? Напр. : было - Ордер 1141572 всё ещё не исполнен, а хотелось Ордер 1141572 XLMUSD всё ещё не исполнен ???
Проголосовать Проголосовать
0 0
18.06.2018 07:49:45
Добрый день.
В данном случае, нужно заменить

log.info("""
                            Ордер {order} выполнен, получено {exec_qty:0.8f}.
                            Создаем ордер на продажу
                        """.format(
                            order=order, exec_qty=float(stock_order_data['executedQty'])
                        ))
на 
log.info("""
                            Ордер {order} {pair} выполнен, получено {exec_qty:0.8f}.
                            Создаем ордер на продажу
                        """.format(
                            order=order, exec_qty=float(stock_order_data['executedQty']), pair=orders_info[order]['order_pair']
                        ))
Ну и в других местах по аналогии
Проголосовать Проголосовать
0 0
19.06.2018 14:58:49
Всем здравия! Андрей К.. вы могли бы скинут папку с файлами и дополнениями от Sergey H.. а то просто бот у меня работает без проблем а с дополнениями не запускается( или что то я не так делаю(((
Проголосовать Проголосовать
0 0
10.07.2018 03:17:40
Добрый день! Запустил бота. Все работало нормально. 
Но!  потом увидел сообщение от сервера  {"code":-2010,"msg":"Account has insufficient balance for requested action."}
Торгую BTC/USDT. Для начала решил 300USDT использовать для покупки-продажи BTC. Ордер на покупку отработал отлично, но ордер на продажу дает выше указанную ошибку. В чем проблема? 
Спасибо!
Проголосовать Проголосовать
0 0
11.07.2018 12:38:11
Добрый день!
У вас на балансе меньше монет, чем вы купили.
Либо вы используете комиссию НЕ bnb - но в боте этого не указали, при покупке списалась комиссия с купленных монет, а бот думает, что комиссия списалась в BNB.
Либо какой-то другой бот или человек потратил монеты.
Посмотрите историю торгов на самой бирже, сравните сколько было куплено и сколько числится на балансе, может быть увидите сколько не хватает и куда они делись.
Если решите начать всё с нуля, удалите файл binance.db из папки с ботом, тогда он забудет о созданных ордерах и начнет опять с покупки
Проголосовать Проголосовать
0 0
21.07.2018 13:33:54
Добрый день, Андрей!
Вы не разбирались с работой ордеров типа STOP_LOSS_LIMIT?
В моем понимании такой ордер на примере SELL должен работать так: продает по цене orderPrice с прибылью, если же цена пошла в противоположном направлении, то продает по цене stopPrice с убытком. Соответственно, в момент выставления ордера цена orderPrice должна быть выше текущей, а stopPrice - ниже.
Однако, на практике у меня такой ордер игнорирует снижение цены до stopPrice - ничего не происходит.
Приходится роботом с какой-то периодичностью проверять такие ордера и, в случае снижения цены ниже stopPrice, продавать по цене MARKET.
Есть ли более "прямое" решение этой проблемы?
Проголосовать Проголосовать
0 0
24.07.2018 09:26:42
Добрый день.
Там другая логика у бинанса, грубо говоря при падении цены до определенного уровня родится ордер по указанной цене.
Кроме как ботом я вариантов не знаю)
Проголосовать Проголосовать
1 0
21.07.2018 16:56:40
Доброго времени суток! 
подскажите, пожалуйста, как исправить ошибку

2018-07-22 00:09:55,748 [DEBUG] Получаем все неисполненные ордера по БД
2018-07-22 00:09:55,750 [DEBUG] Неисполненных ордеров в БД нет
2018-07-22 00:09:55,751 [DEBUG] Получаем из настроек все пары, по которым нет неисполненных ордеров
2018-07-22 00:09:55,753 [DEBUG] Найдены пары, по которым нет неисполненных ордеров: ['BTCUSDT']
2018-07-22 00:09:55,754 [DEBUG] Работаем с парой BTCUSDT
2018-07-22 00:09:55,779 [DEBUG] Starting new HTTPS connection (1): api.binance.com:443
2018-07-22 00:09:57,045 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1532189390000&signature;=a0060d6db83d47ba4511cfc49f803934a4a6e3e1c76ca72f838aa45dae2440ab HTTP/1.1" 400 None
2018-07-22 00:09:57,053 [ERROR] 'balances'
Traceback (most recent call last):
  File "./binance_bot.py", line 425, in <module>
    balance['asset']: float(balance['free']) for balance in bot.account()['balances']
KeyError: 'balances'

баланс есть, комиссия в BNB. 
заранее спасибо!
</module>
Проголосовать Проголосовать
0 0
24.07.2018 09:33:04
Добрый день.
Запустил только что бота, проверил, такой ошибки нет, попробуйте создать новые API ключи и запустить с ними, может что-то с правами
Проголосовать Проголосовать
0 0
22.07.2018 16:41:40
Здравствуйте Андрей!
недавно Бинанс провел изменения в API и Ваш пример бота перестал работать, подскажите пожалуйста что подкорректировать в коде. Может быть даже выпустить статейку было бы идеально. Спасибо
Проголосовать Проголосовать
0 0
24.07.2018 09:34:12
Здравствуйте
И этот бот и другие у меня продолжают работать, какая у вас вылетает ошибка?
Кстати, не так давно Binance удалил все API ключи, может быть ваши перестали быть валидными?
Проголосовать Проголосовать
0 0
26.07.2018 10:26:46
Здравствуйте уважаемый Андрей!
У меня тоже не работает вход по API. Выдается такая ошибка:
C:\Users\Sapa\AppData\Local\Programs\Python\Python37-32\python.exe E:/Binance/binance/binance_bot1.py
Traceback (most recent call last):
  File "E:/Binance/binance/binance_bot1.py", line 11, in <module>
    from binance_api import Binance
  File "E:\Binance\binance\binance_api.py", line 5, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'

Process finished with exit code 1
Ключи обновил, все безрезультатно. Подскажите мне валенку, плиз, в чем причина.</module></module>
Проголосовать Проголосовать
0 0
27.07.2018 07:19:03
Разобрался, сам накосячил. Установил Python37 не для АМД, вот и не работало. Прошу прощения за свой нубизм. Андрей, спасибо за бота!
Проголосовать Проголосовать
0 0
27.07.2018 12:33:42
Отлично)
Проголосовать Проголосовать
0 0
29.07.2018 14:49:11
Уважаемый Андрей! А нельзя ли сделать так, чтобы бот покупал по цене ниже, чем высчитанная средняя в данный момент на вводимый вручную параметр? Например, создавать ордер на покупку на 1% меньшей цены в момент создания ордера. Мне кажется, что такой параметр очень бы пригодился и бот намного меньше зависал бы на верхах.
Проголосовать Проголосовать
0 0
01.08.2018 10:16:13
Можно, в данном случае стоит заменить
avg_price = sum(prices) / len(prices)
на
perc = 0.01
avg_price = prices[0] * (1- perc)

ну и по хорошему сменить название переменной, вынести perc на самый верх и т.п.
0.01 это 1%

Проголосовать Проголосовать
0 0
02.08.2018 08:48:12
Спасибо! Теперь понял, где можно поиграть значениями.
Проголосовать Проголосовать
0 0
29.07.2018 14:03:23
Какой ,в среднем, выходит профит за месяц(в %). Скажите пж
Проголосовать Проголосовать
0 0
10.08.2018 03:17:24
День добрый. Иногда после нескольких часов работы выскакивает следующая ошибка.
code":-1021,"msg":"Timestamp for this request is outside of the recvWindow.
Я так понимаю, что дело в нарушении интернет соединения. Можно ли скорректировать апи таким образом, чтобы выполнение программы при этой ошибке не прерывалось. А то приходится перезапускать терминал по несколько раз в день.
Проголосовать Проголосовать
0 0
11.08.2018 06:47:27
Добрый день.
У вас именно бот останавливается, или просто в цикле об ошибке сообщает?
Бот не должен прерываться вообще никогда, т.к. все возможные ошибки он должен игнорировать и идти на следующий круг.
В вашем случае наверное постепенно расходится время. Грубо говоря ваша машина каждую секунду отстает на 5мс и через несколько часов разрыв времени становится критичным для Binance. Бот продолжает работать, но биржа не принимает запросы.
Можете на каждой итерации добавлять синхронизацию, это лишний запрос к апи, но зато, наверное, проблема уйдет.
Для этого измените вот этот кусок кода

while True:
    try:
        # Устанавливаем соединение с локальной базой данных

На вот такой (например)

while True:
    try:
        # Синхронизация времени
        time.sleep(0.045)
        bot.set_shift_seconds(int(bot.time()['serverTime'])//1000 - int(time.time()))
        # Устанавливаем соединение с локальной базой данных
Проголосовать Проголосовать
1 0
11.08.2018 13:53:35
Здравствуйте. 
Огромное спасибо за поддержку. 
Я написал собственного бота https://yadi.sk/d/96ecaqX13a8gcP с использованием вашего API. Суть та же: в замкнутом цикле покупаются несколько криптоактивов по цене Bid и тут же продаются по Ask. Разница лишь в том, что раз в десять минут анализируются все BTС пары биржи в поисках самых оптимальных. Сперва список ранжируется по параметру (Ask-Bid)/Bid. Берутся только пары с отношением выше 0.01, т.е. чтобы при покупке по Bid и продаже по Ask прибыль со сделки составляла более 1%.  Из полученного списка берется половина с максимальным количеством сделок за прошлые сутки, так сказать самые ликвидные. Из оставшихся опять берется половина с максимальным количеством сделок за последние пять минут, т.е. по которым ведется активная торговля прямо сейчас. В результате остается штук пять. К ним прибавляются пары, по которым остались старые ордера на покупку с прошлых сессий (с целью удаления) и все, что есть на депозите (кроме BTC и BNB) для продажи с прибылью. Полученный список сохраняется в экселевксий файл со всеми необходимыми параметрами. Для контроля жизнедеятельности шлются сообщения в телеграмм.  По выбранным пяти парам постоянно ставятся ордера на покупку по бидам, если они срабатывают  ставятся ордера на продажу по аскам. Если после покупки цена отскочила вниз, актив продается в безупыток по минимальной цене с учетом комиссии.  Каждые пять минут бот проверяет выставленные ордера, и если Bid поменялся, ордер переставляется.
Так вот, каждые десять минут в функции FULL_LIST_SCAN() выполняется код
local_time = int(time.time())
    server_time = int(ExchangeInfo['serverTime'])//1000
    shift_seconds = server_time-local_time
    bot.set_shift_seconds(shift_seconds)
Разность времени выводится на экран и составляет каждый раз не более 2 секунд. Тем не менее время от времени бот останавливается с ошибкой «сode-1021.». При запуске бота из под VisualStudio, выполнение программы останавливается с выводом окна комментария об ошибке, если напрямую на Питоне, то окно терминала закрывается. Время работы до появления ошибки всегда разное: от пяти минут до нескольких часов. Пробовал запускать на виртуальном сервере Амазон, та же ситуация. Вычитал на гитхабе, что можно расширить временное окно, в параметре функции АПИ вставить {'recvWindow': 10000000}, но никак не соображу, как это к апи можно прикрутить.
Ссылка на бот: https://yadi.sk/d/96ecaqX13a8gcP
Проголосовать Проголосовать
0 0
16.08.2018 11:13:11
Добрый.
Выкидывает ошибку:
Traceback (most recent call last):
  File "C:\Users\Администратор.000\Desktop\binance\bnb_scan.py", line 44, in <module>
    key['SPRED/BID']=(float(key['askPrice'])-float(key['bidPrice'])) / float(key['bidPrice'])
ZeroDivisionError: float division by zero
</module>
Проголосовать Проголосовать
0 0
23.08.2018 08:05:00
Здравствуйте, Сергей.
Решил тестануть Вашего бота. Но столкнулся с проблемой, после запуска бота вылетает ошибка "<urlopen 10060]="" [winerror="" error="" безуспешной,="" была="" было="" время="" другого="" за="" из-за="" или="" компьютера="" не="" неверного="" нужный="" от="" отклик,="" отклика="" подключенного="" получен="" попытка="" разорвано="" соединение="" т.к.="" требуемое="" уже="" установить="" установленное="">". Подскажите, в чем может быть проблема и как пофиксить?
Спасибо.</urlopen>
Проголосовать Проголосовать
0 0
06.09.2018 14:44:53
Сергей, а у меня чего то не заработал Ваш вариант. Выдает ошибку:

06.09.2018 19:49:36 Start program. Time difference = 0 sec
{"code":-1022,"msg":"Signature for this request is not valid."}
Traceback (most recent call last):
  File "./Binance.py", line 29, in <module>
    PAIRS,SYM_LIST = BEST_PAIRS(BnB_LIST) # get best part of all pairs by parameters: Rank=Spred/Bid, Trades per 24H quantity, Trades per 5M quantity
  File "d:\_BinanceTradingBot_\MoreAccurately\BnB_Search.py", line 155, in BEST_PAIRS
    if Ord['symbol'] not in SYM_LIST:
TypeError: string indices must be integers</module>
Проголосовать Проголосовать
0 0
07.09.2018 06:51:30
У меня данная ошибка возникает в модуле TELEGRAM(), причем только на домашнем компе, при запуске с VPS все норм. Можно закомментировать данный модуль, бот просто не будет слать сообщения в телеграмм.
Проголосовать Проголосовать
0 0
07.09.2018 13:05:06
Закоментил все что относится к отправке в телеграмм и ...

07.09.2018 18:09:35 Start program. Time difference = -1 sec
Traceback (most recent call last):
  File "./Binance.py", line 29, in <module>
    PAIRS,SYM_LIST = BEST_PAIRS(BnB_LIST) # get best part of all pairs by parameters: Rank=Spred/Bid, Trades per 24H quantity, Trades per 5M quantity
  File "d:\_BinanceTradingBot_\MoreAccurately\BnB_Search.py", line 155, in BEST_PAIRS
    LimOrders=bot.openOrders()
  File "d:\_BinanceTradingBot_\MoreAccurately\binance_api.py", line 47, in wrapper
    return self.call_api(**kwargs)
  File "d:\_BinanceTradingBot_\MoreAccurately\binance_api.py", line 76, in call_api
    raise Exception(response.text)
Exception: {"code":-1022,"msg":"Signature for this request is not valid."}
Для продолжения нажмите любую клавишу . . .</module>
Проголосовать Проголосовать
0 0
19.09.2018 09:49:58
Вообще ничего не понимаю. Установил сделал так как было написано. Ничего не получается. Как быть помогите кто-нибудь, уже глаза болят. Хотя не скажу что полный ноль в компьютерах. Помогите пожалуйста, что я ни так делаю. Лучше если в ВК напишите vk.com/id12110920 буду очень признателен.
Проголосовать Проголосовать
0 0
24.09.2018 04:04:52
здравствуйте.очень хороший при правильной настройке, но можно ли добавить еще одно условие в него если уже есть ордер на продажу по валюте то ее не нужно покупать пока ордера не продадутся?
Проголосовать Проголосовать
0 0
25.09.2018 17:02:08
Приветствую!
Не понял из описания :( Бот работает в режиме усреднения, или просто купил по одной цене и выставляет по цене = цена покупки + провит + комиссия.
Проголосовать Проголосовать
0 0
04.10.2018 18:51:10
Доброго времени суток. 
При запуске сетапа получаю следующее: You are using pip version 10.0.1, however version 18.0 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
Прописываю python -m pip install --upgrade pip (и ей подобные команды) - все время выдает ошибку синтаксиса. Как быть?)
Спасибо
Проголосовать Проголосовать
0 0
04.10.2018 18:55:17
Собсна, вот ответ: https://bootstrap.pypa.io/get-pip.py
Качаем, запускаем в Питоне (предложит при скачивании) --- профит
Проголосовать Проголосовать
0 0
04.10.2018 18:56:08
Не помогло)
Проголосовать Проголосовать
0 0
22.10.2018 20:30:46
добрый день. у binance уменьшился дискаунт - 25% вместо 50%. нужно ли что то менять в боте?
Проголосовать Проголосовать
0 0
22.10.2018 20:43:17
забыл добавить вопрос - CANCELED в логах 
2018-10-22 23:46:07,388 [DEBUG] Состояние ордера 26566004 - CANCELED
2018-10-22 23:46:07,405 [DEBUG] Starting new HTTPS connection (1): api.binance.com:443
2018-10-22 23:46:07,994 [DEBUG] https://api.binance.com:443 "GET /api/v3/order?symbol=LTCBTC&orderId;=69667279&timestamp;=1540241166000&signature;=8a18b202f5b7e930509da0053b4d4cbf487598603a4eabb54341b4f9f601c725 HTTP/1.1" 200 None
 до бесконечности - что означает? 

спасибо за ответы
Проголосовать Проголосовать
0 0
23.10.2018 17:11:41
Добрый день,
Да, нужно поставить

STOCK_FEE = 0.00075

Я обновил архив с ботом
Проголосовать Проголосовать
0 0
23.10.2018 17:14:52
Такая ситуация в боте не обрабатывается, когда бот создал ордер, а человек отменил его.
Можете, конечно, доработать бота, что бы он помечал в БД такие ордера отмененными, но проще будет либо удалить базу целиком, либо удалить ордер руками из базы, тогда бот про него забудет.
Проголосовать Проголосовать
0 0
23.10.2018 19:21:47
спасибо большое
Проголосовать Проголосовать
0 0
07.11.2018 08:04:42
Андрей, приветствую! Какой профит посоветуете поставить, если не использовать BNB?
Проголосовать Проголосовать
0 0
10.11.2018 17:32:45
Добрый день,
Нужно в STOCK_FEE установить актуальную комиссию, она будет закладываться и в покупку, и в продажу, немного изменятся цены, а профит по прежнему будет указываться отдельно, как и с BNB.
Проголосовать Проголосовать
0 0
07.11.2018 09:07:06
что то получаю отэто теперь 
2018-11-07 12:13:10,256 [DEBUG] Starting new HTTPS connection (1): api.binance.com
2018-11-07 12:13:10,737 [DEBUG] https://api.binance.com:443 "GET /api/v3/account?timestamp=1541581989000&signature;=d4d105b724f501845c333c3321505745f4e23e69e42012b6e2cc49d8dbd820d0 HTTP/1.1" 401 None
{"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}
2018-11-07 12:13:10,757 [ERROR] 'balances'
Traceback (most recent call last):
  File "./binance_bot.py", line 434, in <module>
    balance['asset']: float(balance['free']) for balance in bot.account()['balances']
KeyError: 'balances'</module>
Проголосовать Проголосовать
0 0
10.11.2018 17:35:18
Попробуйте запустить с сервера, ну и еще API ключи проверить, Binance иногда втихую их удаляет, если видит угрозы безопасности
Проголосовать Проголосовать
0 0
13.11.2018 17:13:50
Доброго времени суток Всем.
Можно ли сделать так, чтобы после срабатывания stop loss прекращалась подача новых ордеров, а именно останавливалась торговля?
Проголосовать Проголосовать
0 0
14.11.2018 07:34:20
По указанной паре, я так понимаю, по другим бот должен продолжать работать?
Как вы узнаете, что бот перестал работать по паре, это наверное не очень удобно отслеживать если пар много...

Заведите, пожалуйста, тему тут https://forum.bablofil.ru/forum/9-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%B8%D0%B4%D0%B5%D0%B8-%D0%B1%D0%BE%D1%82%D0%BE%D0%B2/
я выложу отдельную версию кода с такой доработкой, тут это делать неудобно и включать в существующего бота пока что тоже, наверное не стоит
Проголосовать Проголосовать
0 0
Пожалуйста, авторизуйтесь, что бы оставить свой комментарий
Крипто-кошельки для помощи и благодарности проекту:

Bitcoin адрес проекта: [[address]]

Перевод на сумму [[value]] BTC получен. Спасибо!.
[[error]]

Ethereum адрес проекта: [[address]]