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

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

Всем привет!

На сайт добавлен бот для Bittrex с поддержкой индикаторов MACD и RSI. 

Ссылка на бота Bittrex+MACD+RSI

bittrex_macd_rsi.thumb.png.b67dafd78db6381db8de0a5c2f323869.png

Умеет анализировать рынок для поиска точки входа, причем можно комбинировать 

  • Не использовать индикаторы
  • Использовать только 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 (подробнее про установку талиб читайте тут , особенно в комментариях)

  1. Устанавливаете Python 3.6
  2. Ставите нужные модули
  3. Архив с ботом распаковываете в папку
  4. В файле config.py прописываете ключи
  5. В командной строке пишете cd путь_к_папке_с_ботом
  6. После этого в командной строке пишете python run.py

 

Поделиться сообщением


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

Добрый день. Установлен данный бот на тонком клиенте 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 битными системами? 

Поделиться сообщением


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

Не могло ли получиться так, что у вас стоят два питона, 32 и 64, вы установили пакеты для 64 а запускаете 32?

Нюансов так сходу не вспомню, на 64 битной винде работает без костылей, правда не на тонком клиенте и процессоры от Intel а не AMD как у вас, возможно будет правильнее скачать talib и скомпилировать все самому, без whl.

Поделиться сообщением


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

Странно, вчера весь вечер не мог запустить бота. А сегодня все сразу заработало как часики! Большое спасибо!

Поделиться сообщением


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

Бот офигенный, но мне кажется что он очень много при много уделяет логированию. По мне например было бы удобно чтоб бот только совершённые сделки писал (коротко и ясно), как например вот этот https://bablofil.ru/bot-dlya-birgi-bittrex/ . Так что может быть в этом боте просто расширить функции логирования в файле config.py , (т.к. может быть существующие логи и полезны) чтобы каждый настраивал под свои нужды логи?

Поделиться сообщением


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

привет. вчера бот нормально работал а сегодня идут такие ошибки. я что то не то нажал  или что?

 

Цитата

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)

 

Поделиться сообщением


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

А сейчас работает?

Проверьте, открывается ли ссылка в браузере 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()

и посмотреть, что напишет

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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, но это отдельная песня

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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 пар не торгует

Поделиться сообщением


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

Вот эта строка 

print(res)

Должна выводить ответ биржи, включая и ошибки

Попробуйте засечь, что там за текст

Если быстро всё меняется, замените на 

market_log.warning(res.text) и смотрите логи пар, по которым проблема

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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

 

Изменено пользователем Alexandr__

Поделиться сообщением


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

Поменяйте на 

market_log.warning(res.text) 

или на 

print(res.text)

пожалуйста, мало данных

Поделиться сообщением


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

строка когда все хорошо

{"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: *************** &bull; 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">&bull;</span>
    <span class="cf-footer-item"><span>Your IP</span>:**************</span>
    <span class="cf-footer-separator">&bull;</span>
    <span class="cf-footer-item"><span>Performance &amp; 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>

Изменено пользователем Alexandr__

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Alexandr__ сказал:

The owner of this website (bittrex.com) has banned you temporarily from accessing this website.

В общем тут защита от ДДОСа стоит, показывается капча и т.п.

Защищаются от кого-то, ввели видимо лимиты. Придется либо ждать, либо использовать прокси

ÐаÑÑинки по запÑоÑÑ ÑÑ Ð½Ðµ пÑойдеÑÑ

Поделиться сообщением


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

У меня стоит MARKET_WAIT_TIME = 5

Но такое ощущение, что программа быстро перебирает все пары топом ждет 5 секунд. потом опять все пары ...... 

Поделиться сообщением


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

Оно работает в потоках, т.е. каждая пара независимо от других лезет на биржу, делает свои дела и потом спит сколько скажут

Вы можете изменить код примерно так:

Код 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

Это такой хак будет, они пойдут друг за другом и каждый будет ждать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, admin сказал:

Вы можете изменить код примерно так:

 

Спасибо то что надо (+100 к карме :-)

при WAIT_TIME 1 секунда + таймфрейм 30 минут = отлично

возможно и блокировать меньше будет в подозрении ДДОС

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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

Это такой хак будет, они пойдут друг за другом и каждый будет ждать

у меня что то не получается

2.PNG

Поделиться сообщением


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

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

Попробуйте поменять пробелы на табуляции или наоборот, или скопируйте пустое место со строки сверху и вставьте его

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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)

Постоянная ошибка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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()

и посмотреть, что напишет 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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(

Поделиться сообщением


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

Может не в том файле поменяли?
Судя по выводу файл
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.

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

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

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

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

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

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


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