Advertisement
Astranome

Маржин Бинанс Занять-купить

Jun 29th, 2020
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.42 KB | None | 0 0
  1. """
  2.    Занять и купить Подробная информация о боте на сайте bablofil.ru/bot-dlya-binance
  3. """
  4. import sqlite3
  5. import logging
  6. import time
  7. import os
  8. import math
  9.  
  10. from datetime import datetime
  11.  
  12. from binance_api import Binance
  13.  
  14. bot = Binance(
  15.     API_KEY='ключ',
  16.     API_SECRET='секрет'
  17. )
  18.  
  19. settings = dict(
  20.     symbol='BTCUSDT',            # Пара для отслеживания
  21.     strategy="Short",           # Стратегия - Long (повышение), Short (понижение)          
  22.     stop_loss_perc = 0.05,       # % оставания от цены
  23.     stop_loss_fixed = 15000,        # 10000 Изначальный stop-loss, можно установить руками нужную сумму, потом бот подтянет.
  24.                                 # Можно указать 0, тогда бот высчитает, возьмет текущую цену и применит к ней процент
  25.     amount = 50,             # Кол-во монет, которое планируем продать (в случае Long) или купить (в случае Short)
  26.                                 # Если указываем Long, то альты для продажи (Например, продать 0.1 ETH в паре ETHBTC)
  27.     #amount = 11              # Если Short, то кол-во, на которое покупать, например купить на 0.1 BTC по паре ETHBTC
  28.     startrate = 0       # Нефиг продавать себе в убыток
  29. )
  30.  
  31. multiplier = -1 if settings['strategy'] == "Long" else 1
  32. mstart = 1 if settings['strategy'] == "Long" else -1 # startrate множитель
  33. print("Получаем настройки пар с биржи")
  34. symbols = bot.exchangeInfo()['symbols']
  35. step_sizes = {symbol['symbol']:symbol for symbol in symbols}
  36. for symbol in symbols:
  37.     for f in symbol['filters']:
  38.         if f['filterType'] == 'LOT_SIZE':
  39.             step_sizes[symbol['symbol']] = float(f['stepSize'])
  40.  
  41.  
  42. while True:
  43.     try:
  44.         print('Проверяю пару {pair}, стратегия {strategy}'.format(pair=settings['symbol'], strategy=settings['strategy']))
  45.         # Получаем текущие курсы по паре
  46.         current_rates = bot.depth(symbol=settings['symbol'], limit=5)
  47.  
  48.         bid=float(current_rates['bids'][0][0])
  49.         ask=float(current_rates['asks'][0][0])
  50.  
  51.         # Если играем на повышение, то ориентируемся на цены, по которым продают, иначе на цены, по которым покупают
  52.         curr_rate = bid if settings['strategy'] == "Long" else ask
  53.        
  54.         if settings['startrate'] == 0:
  55.           settings['startrate'] = (curr_rate/100) * (settings['stop_loss_perc']*mstart+100) # авто трейлстоп стартовый
  56.  
  57.         print("Текущие курсы bid {bid:0.8f}, ask {ask:0.8f}, выбрана {cr:0.8f} stop_loss {sl:0.8f}".format(
  58.             bid=bid, ask=ask, cr=curr_rate, sl=settings['stop_loss_fixed']
  59.         ))
  60.  
  61.         # Считаем, каким был бы stop-loss, если применить к нему %
  62.         curr_rate_applied = (curr_rate/100) * (settings['stop_loss_perc']*multiplier+100)
  63.         print ('Applied=', curr_rate_applied)
  64.         print ( 'Startrate=', settings['startrate'])
  65.         if settings['strategy'] == "Long":
  66.             # Выбрана стратегия Long, пытаемся продать монеты как можно выгоднее
  67.             if curr_rate > settings['stop_loss_fixed']:
  68.                 print("Текущая цена выше цены Stop-Loss")
  69.                 if curr_rate_applied > settings['startrate']:
  70.                    if curr_rate_applied > settings['stop_loss_fixed']:
  71.                     print("Пора изменять stop-loss, новое значение {sl:0.8f}".format(sl=curr_rate_applied))                    
  72.                     settings['stop_loss_fixed'] = curr_rate_applied
  73.             else:
  74.                 # Текущая цена ниже или равна stop loss, продажа по рынку
  75.                 res = bot.marginCreateOrder(
  76.                     symbol=settings['symbol'],
  77.                     recvWindow=15000,
  78.                     side='SELL',
  79.                     type='MARKET',
  80.                     quantity=settings['amount']
  81.                 )
  82.                 print('Результат создания ордера', res)
  83.                 if 'orderId' in res:
  84.                     # Создание ордера прошло успешно, выход
  85.                     break
  86.         else:
  87.             # Выбрана стратегия Short, пытаемся купить монеты как можно выгоднее
  88.             if curr_rate < settings['stop_loss_fixed']:
  89.                 print("Текущая цена ниже stop-loss")
  90.                 if curr_rate_applied < settings['stop_loss_fixed']:
  91.                    if curr_rate_applied < settings['startrate']:               
  92.                     print("Пора изменять stop-loss, новое значение {sl:0.8f}".format(sl=curr_rate_applied))                    
  93.                     settings['stop_loss_fixed'] = curr_rate_applied
  94.             else:
  95.                 # Цена поднялась выше Stop-Loss, Покупка по рынку
  96.                 quantity = math.floor((settings['amount']/curr_rate)*(1/step_sizes[settings['symbol']]))/(1/step_sizes[settings['symbol']])
  97.                 print("Цена поднялась выше Stop-Loss, Покупка по рынку, кол-во монет {quantity:0.8f}".format(quantity=quantity))
  98.                 # math.Floor(coins*(1/stepSize)) / (1 / stepSize)
  99.                 res = bot.marginCreateOrder(
  100.                     symbol=settings['symbol'],
  101.                     recvWindow=15000,
  102.                     side='BUY',
  103.                     type='MARKET',
  104.                     sideEffectType='MARGIN_BUY', # занять и на куплю
  105.                     quantity=quantity
  106.                 )
  107.                 print('Результат создания ордера', res)
  108.                 if 'orderId' in res:
  109.                     # Создание ордера прошло успешно, выход
  110.                     break
  111.  
  112.     except Exception as e:
  113.         print(e)
  114.     time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement