admin 66 Опубликовано: 24 ноября 2018 Share Опубликовано: 24 ноября 2018 Всем привет! На сайт добавлен бот для Bittrex с поддержкой индикаторов MACD и RSI. Ссылка на бота Bittrex+MACD+RSI Умеет анализировать рынок для поиска точки входа, причем можно комбинировать Не использовать индикаторы Использовать только MACD для входа Использовать только RSI для входа Использовать и MACD и RSI для входа Каждый индикатор настраивается отдельно, т.е. можно MACD например считать по свечам по 30 минут, а RSI - по суткам или 5 минутам. Может работать по нескольким парам параллельно, т.е. вы задаете 30 пар, например, бот делает по потоку для каждой, и как только на одной из них появляется сигнал для входа, бот пытается совершить BUY на сумму CAN_SPEND (для каждой пары). Например, если как на скриншоте указать 4 доллара и много пар, то бот теоретически может по каждой паре создать сделку. На практике, если использовать индикаторы, такое вряд ли когда-то случится. Так же бот может выставлять селл по купленному баю на основе индикаторов: Без индикаторов (сразу выставить SELL) Выставлять, когда позволит MACD (считается отдельно от MACD, который для покупки) Выставлять, когда позволит RSI (тоже считается отдельно) Выставлять, когда позволят оба индикатора Бот запоминает информацию по каждому баю, т.е. выставляет потом на продажу именно то, что купил, на чужие деньги не зарится. Если указывать много пар, нужно указывать одно основание, что бы CAN_SPEND был одинаковым, например доллары или BTC. Параметры для настройки MACD расписаны в этой статье. Можно запускать несколько ботов, один будет работать на долларах, другой на биткойнах, например. Для этого нужно разных ботов запускать в разных папках. Для работы требуется Python 3.6 и выше, модули requests, talib, numpy (подробнее про установку талиб читайте тут , особенно в комментариях) Устанавливаете Python 3.6 Ставите нужные модули Архив с ботом распаковываете в папку В файле config.py прописываете ключи В командной строке пишете cd путь_к_папке_с_ботом После этого в командной строке пишете python run.py Цитата Ссылка на сообщение Поделиться на других сайтах
bros3670 0 Опубликовано: 10 декабря 2018 Share Опубликовано: 10 декабря 2018 Добрый день. Установлен данный бот на тонком клиенте HP T610 под Windows 7 x64. Python-3.7.0-amd64. Пакеты TA_Lib-0.4.17-cp37-cp37m-win_amd64.whl, numpy и requests установлены через pip install, тоже, по идее, должны быть 64 битными. При работе валят куча ошибок связанных именно с пакетами. Тот же бот на другой машине под 32 битной Windows 7 с 32 битными пакетами пашет на ура. Какие есть нюансы запуска ботов на питоне под 64 битными системами? Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 10 декабря 2018 Автор Share Опубликовано: 10 декабря 2018 Не могло ли получиться так, что у вас стоят два питона, 32 и 64, вы установили пакеты для 64 а запускаете 32? Нюансов так сходу не вспомню, на 64 битной винде работает без костылей, правда не на тонком клиенте и процессоры от Intel а не AMD как у вас, возможно будет правильнее скачать talib и скомпилировать все самому, без whl. Цитата Ссылка на сообщение Поделиться на других сайтах
bros3670 0 Опубликовано: 10 декабря 2018 Share Опубликовано: 10 декабря 2018 Странно, вчера весь вечер не мог запустить бота. А сегодня все сразу заработало как часики! Большое спасибо! Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr 0 Опубликовано: 21 февраля 2019 Share Опубликовано: 21 февраля 2019 Бот офигенный, но мне кажется что он очень много при много уделяет логированию. По мне например было бы удобно чтоб бот только совершённые сделки писал (коротко и ясно), как например вот этот https://bablofil.ru/bot-dlya-birgi-bittrex/ . Так что может быть в этом боте просто расширить функции логирования в файле config.py , (т.к. может быть существующие логи и полезны) чтобы каждый настраивал под свои нужды логи? Цитата Ссылка на сообщение Поделиться на других сайтах
ceomkad 0 Опубликовано: 10 апреля 2019 Share Опубликовано: 10 апреля 2019 привет. вчера бот нормально работал а сегодня идут такие ошибки. я что то не то нажал или что? Цитата File "C:\Users\CEO\Desktop\Новая папка (2)\main.py", line 228, in process_market macd_advice = get_macd_advice(chart_data=get_ticks(market, period=Config.MACD_TICK_INTERVAL)) File "C:\Users\CEO\Desktop\Новая папка (2)\misc.py", line 103, in get_ticks res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() File "C:\Users\CEO\AppData\Local\Programs\Python\Python37-32\lib\site-packages\requests\models.py", line 897, in json return complexjson.loads(self.text, **kwargs) File "C:\Users\CEO\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads return _default_decoder.decode(s) File "C:\Users\CEO\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\CEO\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr 0 Опубликовано: 10 апреля 2019 Share Опубликовано: 10 апреля 2019 У меня также посыпались ошибки 🆘 Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 А сейчас работает? Проверьте, открывается ли ссылка в браузере https://api.bittrex.com/api/v1.1/public/getmarkethistory?market=USDT-BTC И вот эта https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=USDT-BTC&tickInterval=thirtyMin Еще может быть какие-то пары убрали с горя (им вчера отказали в лицензии в Нью-Йорке) Еще попробуйте временно заменить res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() на res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE) print(res) res = res.json() и посмотреть, что напишет 1 Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 21.02.2019 в 14:17, Alexandr сказал: Бот офигенный, но мне кажется что он очень много при много уделяет логированию. По мне например было бы удобно чтоб бот только совершённые сделки писал (коротко и ясно), как например вот этот https://bablofil.ru/bot-dlya-birgi-bittrex/ . Так что может быть в этом боте просто расширить функции логирования в файле config.py , (т.к. может быть существующие логи и полезны) чтобы каждый настраивал под свои нужды логи? Смотрите, в конфиге есть такая строка LOG_LEVEL = logging.DEBUG А в боте тут и там строки вида market_log.debug Вот. В конфиге можно поставить LOG_LEVEL = logging.INFO, и тогда все сообщения лога со словом .debug не будут выводиться никуда. В самых нужных сообщениях используйте конструкцию market_log.info, она будет выводиться. ----- В общем если в конфиге стоит LOG_LEVEL = logging.DEBUG то выводятся все market_log.info и market_log.debug Если стоит LOG_LEVEL = logging.INFO то выводится только market_log.info, даже если в коде есть всякие разные market_log.debug Там еще есть уровни выше, warning, error и critical, но это отдельная песня 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr__ 0 Опубликовано: 11 апреля 2019 Share Опубликовано: 11 апреля 2019 2 часа назад, admin сказал: А сейчас работает? Проверьте, открывается ли ссылка в браузере https://api.bittrex.com/api/v1.1/public/getmarkethistory?market=USDT-BTC И вот эта https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=USDT-BTC&tickInterval=thirtyMin Добрый день. Вчера тоже обнаружил проблему. У меня торговало по 30 парам. Сократил до 2 пар - функционирование восстановилось! Причем 3, 4, 5 пар рандомно то работает то нет. Поменял строки которые вы предложили. Ситуация аналогичная 2 пары торгует , а 30 пар не торгует Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 Вот эта строка print(res) Должна выводить ответ биржи, включая и ошибки Попробуйте засечь, что там за текст Если быстро всё меняется, замените на market_log.warning(res.text) и смотрите логи пар, по которым проблема 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr__ 0 Опубликовано: 11 апреля 2019 Share Опубликовано: 11 апреля 2019 (изменено) 17 минут назад, admin сказал: Должна выводить ответ биржи, включая и ошибки Попробуйте засечь, что там за текст <Response [200]> 2019-04-11 16:54:06,562 BTC-XEM: Условия рынка MACD не подходят<br/> 2019-04-11 16:54:06,563 BTC-XEM: Пропускаем проверку RSI, т.к. MACD не подходит<br/> <Response [429]> 2019-04-11 16:54:06,556 BTC-ETC: Error!!!!!!!<br/> Traceback (most recent call last): File "C:\Users\___________\main.py", line 228, in process_market У меня стоит строка. MARKET_WAIT_TIME = 5 Изменено 11 апреля 2019 пользователем Alexandr__ Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 Поменяйте на market_log.warning(res.text) или на print(res.text) пожалуйста, мало данных 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr__ 0 Опубликовано: 11 апреля 2019 Share Опубликовано: 11 апреля 2019 (изменено) строка когда все хорошо {"success":false,"message":"MARKET_NOT_PROVIDED","result":null,"explanation":null} потом <!DOCTYPE html> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en-US"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en-US"> <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]--> <head> <title>Access denied | bittrex.com used Cloudflare to restrict access</title> <meta charset="UTF-8" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" /> <meta name="robots" content="noindex, nofollow" /> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1" /> <link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/cf.errors.css" type="text/css" media="screen,projection" /> <!--[if lt IE 9]><link rel="stylesheet" id='cf_styles-ie-css' href="/cdn-cgi/styles/cf.errors.ie.css" type="text/css" media="screen,projection" /><![endif]--> <style type="text/css">body{margin:0;padding:0}</style> <!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/zepto.min.js"></script><!--<![endif]--> <!--[if gte IE 10]><!--><script type="text/javascript" src="/cdn-cgi/scripts/cf.common.js"></script><!--<![endif]--> </head> <body> <div id="cf-wrapper"> <div class="cf-alert cf-alert-error cf-cookie-error" id="cookie-alert" data-translate="enable_cookies">Please enable cookies.</div> <div id="cf-error-details" class="cf-error-details-wrapper"> <div class="cf-wrapper cf-header cf-error-overview"> <h1> <span class="cf-error-type" data-translate="error">Error</span> <span class="cf-error-code">1015</span> <small class="heading-ray-id">Ray ID: *************** • 2019-04-11 10:07:29 UTC</small> </h1> <h2 class="cf-subheadline">You are being rate limited</h2> </div><!-- /.header --> <section></section><!-- spacer --> <div class="cf-section cf-wrapper"> <div class="cf-columns two"> <div class="cf-column"> <h2 data-translate="what_happened">What happened?</h2> <p>The owner of this website (bittrex.com) has banned you temporarily from accessing this website.</p> </div> </div> </div><!-- /.section --> <div class="cf-error-footer cf-wrapper"> <p> <span class="cf-footer-item">Cloudflare Ray ID: <strong>****************</strong></span> <span class="cf-footer-separator">•</span> <span class="cf-footer-item"><span>Your IP</span>:**************</span> <span class="cf-footer-separator">•</span> <span class="cf-footer-item"><span>Performance & security by</span> <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=error_footer" id="brand_link" target="_blank">Cloudflare</a></span> </p> </div><!-- /.error-footer --> </div><!-- /#cf-error-details --> </div><!-- /#cf-wrapper --> <script type="text/javascript"> window._cf_translation = {}; </script> </body> </html> Изменено 11 апреля 2019 пользователем Alexandr__ Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 1 минуту назад, Alexandr__ сказал: The owner of this website (bittrex.com) has banned you temporarily from accessing this website. В общем тут защита от ДДОСа стоит, показывается капча и т.п. Защищаются от кого-то, ввели видимо лимиты. Придется либо ждать, либо использовать прокси 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr__ 0 Опубликовано: 11 апреля 2019 Share Опубликовано: 11 апреля 2019 У меня стоит MARKET_WAIT_TIME = 5 Но такое ощущение, что программа быстро перебирает все пары топом ждет 5 секунд. потом опять все пары ...... Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 11 апреля 2019 Автор Share Опубликовано: 11 апреля 2019 Оно работает в потоках, т.е. каждая пара независимо от других лезет на биржу, делает свои дела и потом спит сколько скажут Вы можете изменить код примерно так: Код run.py замените на import threading from config import Config from main import process_market if __name__ == '__main__': while True: for market in Config.MARKETS: process_market(market) А в main.py после строки time.sleep(Config.MARKET_WAIT_TIME) добавьте break time.sleep(Config.MARKET_WAIT_TIME) break Это такой хак будет, они пойдут друг за другом и каждый будет ждать 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr__ 0 Опубликовано: 11 апреля 2019 Share Опубликовано: 11 апреля 2019 5 часов назад, admin сказал: Вы можете изменить код примерно так: Спасибо то что надо (+100 к карме :-) при WAIT_TIME 1 секунда + таймфрейм 30 минут = отлично возможно и блокировать меньше будет в подозрении ДДОС Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr 0 Опубликовано: 15 апреля 2019 Share Опубликовано: 15 апреля 2019 11.04.2019 в 16:34, admin сказал: Оно работает в потоках, т.е. каждая пара независимо от других лезет на биржу, делает свои дела и потом спит сколько скажут Вы можете изменить код примерно так: Код run.py замените на import threading from config import Config from main import process_market if __name__ == '__main__': while True: for market in Config.MARKETS: process_market(market) А в main.py после строки time.sleep(Config.MARKET_WAIT_TIME) добавьте break time.sleep(Config.MARKET_WAIT_TIME) break Это такой хак будет, они пойдут друг за другом и каждый будет ждать у меня что то не получается Цитата Ссылка на сообщение Поделиться на других сайтах
Alexandr 0 Опубликовано: 15 апреля 2019 Share Опубликовано: 15 апреля 2019 отступы убрал Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 18 апреля 2019 Автор Share Опубликовано: 18 апреля 2019 Питон считает отступы по табуляциям и пробелам, визуально для нас отступ выглядит одинаково, но для питона важно, что именно там за символы. Попробуйте поменять пробелы на табуляции или наоборот, или скопируйте пустое место со строки сверху и вставьте его Цитата Ссылка на сообщение Поделиться на других сайтах
explorersrm 0 Опубликовано: 18 апреля 2019 Share Опубликовано: 18 апреля 2019 11.04.2019 в 10:25, admin сказал: А сейчас работает? Проверьте, открывается ли ссылка в браузере https://api.bittrex.com/api/v1.1/public/getmarkethistory?market=USDT-BTC И вот эта https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=USDT-BTC&tickInterval=thirtyMin Еще может быть какие-то пары убрали с горя (им вчера отказали в лицензии в Нью-Йорке) Еще попробуйте временно заменить res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() на res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE) print(res) res = res.json() и посмотреть, что напишет 2019-04-18 14:55:03,771 USD-ETH: Пропускаем проверку RSI, т.к. MACD не позволяет выставлять покупку<br/> 2019-04-18 14:55:04,774 USD-ETH: Получаем все неисполненные ордера по БД<br/> 2019-04-18 14:55:04,777 USD-ETH: Неисполненных ордеров в БД нет, пора ли создать новый?<br/> 2019-04-18 14:55:05,115 USD-ETH: Error!!!!<br/> Traceback (most recent call last): File "C:\Users\?\Desktop\USD-ETH_MR\main.py", line 228, in process_market macd_advice = get_macd_advice(chart_data=get_ticks(market, period=Config.MACD_TICK_INTERVAL)) File "C:\Users\?\Desktop\USD-ETH_MR\misc.py", line 103, in get_ticks res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() File "C:\Users\?\AppData\Local\Programs\Python\Python37\lib\site-packages\requests\models.py", line 897, in json return complexjson.loads(self.text, **kwargs) File "C:\Users\?\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", line 348, in loads return _default_decoder.decode(s) File "C:\Users\?\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\?\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) Постоянная ошибка... Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 18 апреля 2019 Автор Share Опубликовано: 18 апреля 2019 10 минут назад, explorersrm сказал: res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() Вам нужно заменить именно эту строку на res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE) print(res) res = res.json() и посмотреть, что напишет Цитата Ссылка на сообщение Поделиться на других сайтах
explorersrm 0 Опубликовано: 18 апреля 2019 Share Опубликовано: 18 апреля 2019 1 минуту назад, admin сказал: Вам нужно заменить именно эту строку на res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE) print(res) res = res.json() и посмотреть, что напишет Может я допустил ошибку в написании # Получаем с биржи данные, необходимые для построения индикаторов def get_ticks(market, period): chart_data = {} # Получаем готовые данные свечей res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE) print(res) res = res.json() if not res['success']: market_log = log.get_logger(market) market_log = logging.LoggerAdapter(market_log, extra={'log_name': market}) market_log.warning(str(res)) if res['message'] == 'INVALID_MARKET': market_log.warning( Цитата Ссылка на сообщение Поделиться на других сайтах
admin 66 Опубликовано: 18 апреля 2019 Автор Share Опубликовано: 18 апреля 2019 Может не в том файле поменяли? Судя по выводу файлC:\Users\?\Desktop\USD-ETH_MR\misc.py в нем строка res = requests.get("https://bittrex.com/Api/v2.0/pub/market/GetTicks?marketName=" + market + "&tickInterval="+period, verify=Config.SECURE).json() заканчивается на json(), а в вашем примере по другому Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.