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

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


admin

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

Небольшой кусок кода для выставления вилки цен на Binance - как известно, нельзя штатными средствами выставить И тейк-профит, и стоп-лосс.

В коде указываете пары, указываете цены sl и tp (стоп-лосс и тейк профит соответственно), и кол-во к продаже.

Когда текущая цена окажется ниже первой или выше второй, бот продаст указанное кол-во по рынку.

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.00810600,
        'tp':0.009098,
        '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])
                
                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'))

 

binance_api.py

binance_sl.py

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

  • 5 weeks later...
29.10.2018 в 18:20, admin сказал:

Небольшой кусок кода для выставления вилки цен на Binance - как известно, нельзя штатными средствами выставить И тейк-профит, и стоп-лосс.

В коде указываете пары, указываете цены sl и tp (стоп-лосс и тейк профит соответственно), и кол-во к продаже.

Когда текущая цена окажется ниже первой или выше второй, бот продаст указанное кол-во по рынку.


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.00810600,
        'tp':0.009098,
        '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])
                
                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'))

 

binance_api.py

binance_sl.py

 

29.10.2018 в 18:20, admin сказал:

Небольшой кусок кода для выставления вилки цен на Binance - как известно, нельзя штатными средствами выставить И тейк-профит, и стоп-лосс.

В коде указываете пары, указываете цены sl и tp (стоп-лосс и тейк профит соответственно), и кол-во к продаже.

Когда текущая цена окажется ниже первой или выше второй, бот продаст указанное кол-во по рынку.


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.00810600,
        'tp':0.009098,
        '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])
                
                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'))

 

binance_api.py

binance_sl.py

КАК ЗАПУСТИТЬ ЭТО ЧУДО?

 

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

Скачать и установить Python версии 3.6 и выше.

Установить модуль requests - в командной строке написать 

pip install requests

Скачать все файлы в одну папку

Отредактировать binance_sl.py, указать нужные пары и цены, и ключи апи

В командной строке запустить

python binance_sl.py

Бот будет работать, в процессе выводить информацию на экран

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

Он в процентах работает или конкретно самому цену вбивать при котором сработает стоп. Если нет то можно ли сделать работу скрипта в процентах для стоп и тейкпрофит

9 часов назад, admin сказал:

Скачать и установить Python версии 3.6 и выше.

Установить модуль requests - в командной строке написать 

pip install requests

Скачать все файлы в одну папку

Отредактировать binance_sl.py, указать нужные пары и цены, и ключи апи

В командной строке запустить

python binance_sl.py

Бот будет работать, в процессе выводить информацию на экран

 

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

10 часов назад, валерий сказал:

Он в процентах работает или конкретно самому цену вбивать при котором сработает стоп. Если нет то можно ли сделать работу скрипта в процентах для стоп и тейкпрофит

 

В коде выше только четкие границы, можно сделать, что бы можно было и так и так, вот пример

"""
    Подробная информация о боте на сайте 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

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

Traceback (most recent call last):
  File "C:\Users\kolxoz.nik\Desktop\stop\binance_sl.py", line 11, in <module>
    from binance_api import Binance
ModuleNotFoundError: No module named 'binance_api'   во такая ощибка

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

  • 3 months later...

Здравствуйте.Возможно количество к продаже

'amount': 0.01,

сделать не фиксированным ,а процентом от купленных монет.Например если я хочу продать по тэйк профиту все 100% монет.Спасибо.

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

  • 1 month later...
29.10.2018 в 18:20, admin сказал:

Небольшой кусок кода для выставления вилки цен на Binance - как известно, нельзя штатными средствами выставить И тейк-профит, и стоп-лосс.

В коде указываете пары, указываете цены sl и tp (стоп-лосс и тейк профит соответственно), и кол-во к продаже.

Когда текущая цена окажется ниже первой или выше второй, бот продаст указанное кол-во по рынку.


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.00810600,
        'tp':0.009098,
        '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])
                
                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'))

 

binance_api.py

binance_sl.py

Спасибо большое! Код огонь! то что давно искал! Вопрос: а можно сделать подобное на биржах которые дают маржинально торговать? Битфайнекс,/Окекс/Хуоби/Кракен ? чтобы делать все то же самое, но в шорт?

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

10.03.2019 в 19:48, lexanoid1983 сказал:

Здравствуйте.Возможно количество к продаже


'amount': 0.01,

сделать не фиксированным ,а процентом от купленных монет.Например если я хочу продать по тэйк профиту все 100% монет.Спасибо.

Здравствуйте, это конечно можно сделать, придется внести некоторые изменения в код, или вообще его переписать

Относительно простым решением будет примерно такое изменение

if bid <= pairs[pair]['sl'] or bid >= pairs[pair]['tp']:
	print('Цена вышла за диапазон, продажа по рынку')
    
    # Получить все балансы
    balances =  bot.account()['balances']
    # вернется такая структура
    '''
       {
          "makerCommission": 15,
          "takerCommission": 15,
          "buyerCommission": 0,
          "sellerCommission": 0,
          "canTrade": true,
          "canWithdraw": true,
          "canDeposit": true,
          "updateTime": 123456789,
          "balances": [
            {
              "asset": "BTC",
              "free": "4723846.89208129",
              "locked": "0.00000000"
            },
            {
              "asset": "LTC",
              "free": "4763368.68006011",
              "locked": "0.00000000"
            }
          ]
        }
    '''
    # Найти в этом списке свои монеты (для этого придется разбить pair на две части и пройтись в цикле)
    # Кол-во монет привязать к шагу цены и количества, т.к. binance не дает торговать пылью
    # Это урезанное кол-во указать в ордере
    res = bot.createOrder(
      symbol=pair,
      recvWindow=15000,
      side='SELL',
      type='MARKET',
      quantity="...рассчитанное колво"
    )
    print('Результат создания ордера', res)
    pairs[pair]['order_placed'] = True

 

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

16.04.2019 в 19:20, Рома сказал:

Спасибо большое! Код огонь! то что давно искал! Вопрос: а можно сделать подобное на биржах которые дают маржинально торговать? Битфайнекс,/Окекс/Хуоби/Кракен ? чтобы делать все то же самое, но в шорт?

Алгоритм будет работать, но все методы взаимодействия непосредственно с биржей придется изменить. Там, впрочем, небольшие изменения - нужно уметь получать текущие курсы и выставлять ордера по рынку

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

Join the conversation

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

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

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

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

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

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

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

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