Перейти к публикации
Ботоводы/баблоделы

admin

Administrators
  • Публикации

    30
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    4

Последний раз admin выиграл 15 января

Публикации admin были самыми популярными!

Репутация

4 Neutral

2 подписчика

Посетители профиля

Блок посетителей профиля отключен и не будет отображаться другим пользователям

  1. admin

    poloniex_macd

    Версия 1.0.0

    6 скачиваний

    Бот для Полоникса с индикатором MACD Подробнее тут https://bablofil.ru/bot-dlya-birjy-poloniex/ Также добавлен файл poloniex_macd_market, он работает согласно запрошенной логике:
  2. admin

    ATR индикатор своими руками (Exmo.me)

    Тикеру я бы не стал доверять, т.к. он отображает текущую ситуацию, и вы потеряете данные, которые были между вашими запросами к тикеру. У трейдингвью вроде бы есть апи, но я с ним не работал и не уверен, что оно бесплатное https://ru.tradingview.com/rest-api-spec/ Ух ты, а терминал в экселе выглядит здорово :) Это уже рабочий вариант? Кстати почему бы не использовать эксель в качестве бд, не так сложно набросать VBA скрипт который будет на скрытый лист экселя историю сделок копировать
  3. admin

    ATR индикатор своими руками (Exmo.me)

    Поставьте 10000 вместо 1000, оно не описано но работало.. А так вы можете собирать, строить и хранить у себя свечи, минус в том что кода писать больше, плюс в том, что не надо будет каждый раз дергать биржу и можно кучу всяких просчетов делать с разными таймфреймами
  4. Привет, друзья. Опубликована новая статья и выложен скрипт для трейлинга. Можем обсудить тут
  5. admin

    Бот для трейлинга на Binance

    Версия 1.0.0

    50 скачиваний

    Подробное описание - тут
  6. admin

    Бот для Bittrex (MACD+RSI)

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

    Скрипт для вилки цен на Binance

    Нужнг скачать файл binance_api.py из первого сообщения в этой теме, и положить рядом
  8. admin

    Скрипт для вилки цен на Binance

    В коде выше только четкие границы, можно сделать, что бы можно было и так и так, вот пример """ Подробная информация о боте на сайте bablofil.ru/bot-dlya-binance """ import sqlite3 import logging import time import os from datetime import datetime from binance_api import Binance bot = Binance( API_KEY='', API_SECRET='' ) pairs = { 'LTCBTC': { 'sl':0, 'tp':0, 'sl_perc':3, 'tp_perc': 5, 'amount': 0.01, 'order_placed': False }, 'ETHBTC': { 'sl':0.00809700, 'tp':0.009098, 'amount': 0.01, 'order_placed': False }, } while True: for pair in pairs: if pairs[pair]['order_placed']: print('По паре ', pair, ' ордер уже выставлен') else: try: print('Проверяю пару', pair) current_rates = bot.depth(symbol=pair, limit=5) bid=float(current_rates['bids'][0][0]) ask=float(current_rates['asks'][0][0]) if (not pairs[pair].get('sl',0) and not pairs[pair].get('tp',0)) and (pairs[pair].get('sl_perc',0) and pairs[pair].get('tp_perc',0)): sl = bid-bid*(pairs[pair]['sl_perc']/100) tp = ask + ask*(pairs[pair]['tp_perc']/100) print("Для пары {pair} указано использовать проценты, получается sl: {sl:0.8f}, tp: {tp:0.8f}".format(pair=pair, sl=sl, tp=tp)) pairs[pair]['sl'] = sl pairs[pair]['tp'] = tp print("Текущие курсы bid {bid:0.8f}, ask {ask:0.8f} (нужно {sl:0.8f} или {tp:0.8f})".format( bid=bid, ask=ask, sl=pairs[pair]['sl'], tp=pairs[pair]['tp'] )) if bid <= pairs[pair]['sl'] or bid >= pairs[pair]['tp']: print('Цена вышла за диапазон, продажа по рынку') res = bot.createOrder( symbol=pair, recvWindow=15000, side='SELL', type='MARKET', quantity=pairs[pair]['amount'] ) print('Результат создания ордера', res) pairs[pair]['order_placed'] = True except Exception as e: print(e) time.sleep(1) #print(bot.myTrades(symbol='PPTETH')) Если в настройках пары указаны значения, будут браться они. Если указаны проценты (tp_perc, sl_perc), то будут браться проценты, как в примере binance_sl.py
  9. admin

    Как воровать статьи с Форклога

    Этот сайт не на движке WordPress, а Adobe Experience Manager, это относительно редкий движок, для них нужно отдельно скрипт писать, сначала распарсить на ссылки меню с этой страницы, потом перейти по каждой ссылке и парсить ссылки на тех страницах, пока не встретятся страницы с контентом. В общем, это разовая большая задача. Насчет второго вопроса - res_text = response.decode('utf-8') print(res_text) Ну а ошибки можно перехватывать через try/except, игнорировать или обрабатывать, смотря что за ошибки
  10. admin

    Скрипт для вилки цен на Binance

    Скачать и установить Python версии 3.6 и выше. Установить модуль requests - в командной строке написать pip install requests Скачать все файлы в одну папку Отредактировать binance_sl.py, указать нужные пары и цены, и ключи апи В командной строке запустить python binance_sl.py Бот будет работать, в процессе выводить информацию на экран
  11. admin

    Бот для Yobit

    Ну, это вы наверное двух ботов запустили или вроде того? Йобит как только видит несколько запросов в секунду с одного IP, блокирует доступ на несколько минут
  12. Всем привет! На сайт добавлен бот для 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
  13. admin

    Bittrex+MACD+RSI

    Версия 1.0.0

    32 скачивания

    Простой бот для Bittrex с поддержкой MACD + RSI
  14. admin

    Бот для Yobit

    Да, вполне, хотя я впринципе бы поменял бы обновленного бота ) Сейчас не так просто со временем, как найдется, займусь и выложу
  15. admin

    Бот для Yobit

    Точно, вот с отменой Сам не проверял, но должно быть ок ) import os import sys import json import requests import urllib, http.client import hmac, hashlib import time # Вписываем свои ключи API_KEY = '' API_SECRET = b'' # Тонкая настройка CURRENCY_1 = 'ltc' CURRENCY_2 = 'rur' ORDER_LIFE_TIME = 3 # через сколько минут отменять неисполненный ордер на покупку CURRENCY_1 STOCK_FEE = 0.002 # Комиссия, которую берет биржа (0.002 = 0.2%) OFFERS_AMOUNT = 1 # Сколько предложений из стакана берем для расчета средней цены PROFIT_MARKUP = 0.001 # Какой навар нужен с каждой сделки? (0.001 = 0.1%) DEBUG = True # True - выводить отладочную информацию, False - писать как можно меньше CAN_SPEND_PERC = 10 # % от баланса для покупок # Тут ничего менять не надо BUY_ORDER_ID = 0 BUY_SPENT = 0 BUY_AMOUNT = 0 SELL_ORDER_ID= 0 CURR_PAIR = CURRENCY_1.lower() + "_" + CURRENCY_2.lower() """ Каждый новый запрос к серверу должен содержать увеличенное число в диапазоне 1-2147483646 Поэтому храним число в файле поблизости, каждый раз обновляя его """ nonce_file = "./nonce" if not os.path.exists(nonce_file): with open(nonce_file, "w") as out: out.write('1') # Будем перехватывать все сообщения об ошибках с биржи class ScriptError(Exception): pass class ScriptQuitCondition(Exception): pass def call_api(**kwargs): # При каждом обращении к торговому API увеличиваем счетчик nonce на единицу with open(nonce_file, 'r+') as inp: nonce = int(inp.read()) inp.seek(0) inp.write(str(nonce+1)) inp.truncate() payload = {'nonce': nonce} if kwargs: payload.update(kwargs) payload = urllib.parse.urlencode(payload) H = hmac.new(key=API_SECRET, digestmod=hashlib.sha512) H.update(payload.encode('utf-8')) sign = H.hexdigest() headers = {"Content-type": "application/x-www-form-urlencoded", "Key":API_KEY, "Sign":sign} conn = http.client.HTTPSConnection("yobit.io", timeout=60) conn.request("POST", "/tapi/", payload, headers) response = conn.getresponse().read() conn.close() try: obj = json.loads(response.decode('utf-8')) if 'error' in obj and obj['error']: raise ScriptError(obj['error']) return obj except json.decoder.JSONDecodeError: raise ScriptError('Ошибка анализа возвращаемых данных, получена строка', response) def wanna_get(): global BUY_SPENT, BUY_AMOUNT return (BUY_SPENT*(1+STOCK_FEE) + BUY_SPENT * PROFIT_MARKUP) / (1 - STOCK_FEE) # сколько хотим получить за наше кол-во # Реализация алгоритма def main_flow(): global BUY_ORDER_ID, SELL_ORDER_ID, BUY_SPENT, BUY_AMOUNT try: if not BUY_ORDER_ID and not SELL_ORDER_ID: # Открытых ордеров нет, нужно узнать баланс и посчитать от него процент print("Открытых ордеров нет, начинаем новый цикл") balances = call_api(method="getInfo")['return']['funds'] curr_2_balance = float(balances.get(CURRENCY_2, 0)) BUY_SPENT = curr_2_balance*(CAN_SPEND_PERC/100) print( """Баланс основной валюты {b:0.8f}, % для торгов {p:0.2f}, итого на создание ордера будет потрачено {s:0.8f}""".format( b=curr_2_balance, p=CAN_SPEND_PERC, s=BUY_SPENT ) ) time.sleep(1) # Получаем информацию по предложениям из стакана offers = json.loads(requests.get("https://yobit.io/api/3/depth/"+CURR_PAIR+"?limit="+str(OFFERS_AMOUNT)).text)[CURR_PAIR] prices = [bid[0] for bid in offers['bids']] try: avg_price = sum(prices)/len(prices) """ Посчитать, сколько валюты CURRENCY_1 можно купить. На сумму CAN_SPEND за минусом STOCK_FEE, и с учетом PROFIT_MARKUP ( = ниже средней цены рынка, с учетом комиссии и желаемого профита) """ # Купить как есть, потом продать с учетом комиссии my_need_price = avg_price# - avg_price * (STOCK_FEE+PROFIT_MARKUP) BUY_AMOUNT = BUY_SPENT/my_need_price print('buy: кол-во {amount:0.8f}, курс: {rate:0.8f}'.format(amount=BUY_AMOUNT, rate=my_need_price)) # Допускается ли покупка такого кол-ва валюты (т.е. не нарушается минимальная сумма сделки) new_order = call_api(method="Trade", pair=CURR_PAIR, type="buy", rate="{rate:0.8f}".format(rate=my_need_price), amount="{amount:0.8f}".format(amount=BUY_AMOUNT))['return'] BUY_ORDER_ID = new_order['order_id'] print(new_order) if DEBUG: print('Создан ордер на покупку', new_order['order_id']) time.sleep(1) except ZeroDivisionError: print('Не удается вычислить среднюю цену', prices) elif BUY_ORDER_ID: print( """Существует (вероятно) открытый BUY, проверяем его состояние""" ) order_info = call_api(method="OrderInfo", order_id=BUY_ORDER_ID)['return'][str(BUY_ORDER_ID)] if int(order_info['status']) == 0: print("Ордер еще не исполнен") time_passed = time.time() - int(order_info['timestamp_created']) if time_passed > ORDER_LIFE_TIME * 60: print("Ордер уже давно висит, никому не нужен, отменяем") call_api(method="CancelOrder", order_id=BUY_ORDER_ID) BUY_ORDER_ID=0 else: print("Ордер отменять рано, прошло мало времени") elif int(order_info['status']) == 1: print("Ордер на покупку исполнен, пора создавать SELL") print('sell', BUY_AMOUNT, wanna_get(), (wanna_get()/BUY_AMOUNT)) new_order = call_api(method="Trade", pair=CURR_PAIR, type="sell", rate="{rate:0.8f}".format(rate=wanna_get()/BUY_AMOUNT), amount="{amount:0.8f}".format(amount=BUY_AMOUNT))['return'] SELL_ORDER_ID = new_order['order_id'] print(new_order) if DEBUG: print('Создан ордер на продажу', CURRENCY_1, new_order['order_id']) BUY_ORDER_ID=0 elif int(order_info['status']) in (2,3): print("Ордер отменен, сброс состояния") BUY_ORDER_ID=0 time.sleep(1) elif SELL_ORDER_ID: order_status = int(call_api(method="OrderInfo", order_id=SELL_ORDER_ID)['return'][str(SELL_ORDER_ID)]['status']) if order_status == 0: print("Ордер еще не исполнен") elif order_status == 1: print("Ордер на продажу исполнен") BUY_ORDER_ID=0 SELL_ORDER_ID=0 else: print("Ордер на продажу отменен") # Ордер на продажу был отменен человеком, значит на балансе остались монеты # Если нужно, что бы бот забил и начал заново покупать и продавать, раскомментируйте две строки ниже #BUY_ORDER_ID=0 #SELL_ORDER_ID=0 # Иначе, бот будет писать о том, что ордер отменен и больше ничего не делать except ScriptError as e: print(e) except ScriptQuitCondition as e: print(e) except IndexError as e: print("!!!!",e) while(True): main_flow() time.sleep(1)
×