Advertisement
Astranome

TrailStop2SQLite

Jun 15th, 2020
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.77 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. from tkinter import *
  12. from tkinter.ttk import *
  13.  
  14. from binance_api import Binance
  15. #import wpr
  16. #wpr.wprint('meow')
  17.  
  18.  
  19. bot = Binance(
  20.     API_KEY='Paste Public API Key',
  21.     API_SECRET='Paste Private Key'
  22. )
  23.  
  24. settings = dict(
  25.     symbol='BTCUSDT',            # Пара для отслеживания
  26.     strategy="Long",           # Стратегия - Long (повышение), Short (понижение)
  27.     stop_loss_perc = 0.05,       # % оставания от цены
  28.     stop_loss_fixed = 0,        # Изначальный stop-loss, можно установить руками нужную сумму, потом бот подтянет.
  29.                                 # Можно указать 0, тогда бот высчитает, возьмет текущую цену и применит к ней процент
  30.     amount = 0.0012,             # Кол-во монет, которое планируем продать (в случае Long) или купить (в случае Short)
  31.                                 # Если указываем Long, то альты для продажи (Например, продать 0.1 ETH в паре ETHBTC)
  32.     #amount = 11              # Если Short, то кол-во, на которое покупать, например купить на 0.1 BTC по паре ETHBTC
  33.     startrate = 0       # Нефиг продавать себе в убыток либо 0 либо не меньше
  34. )
  35.  
  36. multiplier = -1 if settings['strategy'] == "Long" else 1
  37. mstart = 1 if settings['strategy'] == "Long" else -1 # startrate множитель
  38. print("Получаем настройки пар с биржи")
  39. symbols = bot.exchangeInfo()['symbols']
  40. step_sizes = {symbol['symbol']:symbol for symbol in symbols}
  41. for symbol in symbols:
  42.     for f in symbol['filters']:
  43.         if f['filterType'] == 'LOT_SIZE':
  44.             step_sizes[symbol['symbol']] = float(f['stepSize'])
  45.  
  46.  
  47. while True:
  48.     try:
  49.         print('Проверяю пару {pair}, стратегия LONG SPOT {strategy}'.format(pair=settings['symbol'], strategy=settings['strategy']))
  50.         # Получаем текущие курсы по паре
  51.         current_rates = bot.depth(symbol=settings['symbol'], limit=5)
  52.  
  53.         bid=float(current_rates['bids'][0][0])
  54.         ask=float(current_rates['asks'][0][0])
  55.  
  56.         # Если играем на повышение, то ориентируемся на цены, по которым продают, иначе на цены, по которым покупают
  57.         curr_rate = bid if settings['strategy'] == "Long" else ask
  58.  
  59.         if settings['startrate'] == 0:
  60.           settings['startrate'] = (curr_rate/100) * (settings['stop_loss_perc']*mstart+100) # авто трейлстоп стартовый
  61.  
  62.         print("Текущие курсы bid {bid:0.8f}, ask {ask:0.8f}, выбрана {cr:0.8f} stop_loss {sl:0.8f}".format(
  63.             bid=bid, ask=ask, cr=curr_rate, sl=settings['stop_loss_fixed']
  64.         ))
  65.  
  66.         # Считаем, каким был бы stop-loss, если применить к нему %
  67.         curr_rate_applied = (curr_rate/100) * (settings['stop_loss_perc']*multiplier+100)
  68.         print ('Applied=', curr_rate_applied)
  69.         print ( 'Startrate=', settings['startrate'])
  70.        
  71.  #       Write 2 DB -------------------------------------
  72.         conn = sqlite3.connect("tplong.db")
  73.         cursor = conn.cursor()
  74.         cursor.execute('UPDATE albums SET bidprice = ? , startrate = ? , applied = ?, strategy=?, stoploss=?, amount=?, trailperc=? WHERE id = ?',(bid,settings['startrate'],curr_rate_applied,settings['strategy'],settings['stop_loss_fixed'],settings['amount'],settings['stop_loss_perc'],1))
  75.         conn.commit()
  76.         conn.close()
  77.              
  78.  
  79.         if settings['strategy'] == "Long":
  80.             # Выбрана стратегия Long, пытаемся продать монеты как можно выгоднее
  81.             if curr_rate > settings['stop_loss_fixed']:
  82.                 print("Текущая цена выше цены Stop-Loss")
  83.                 if curr_rate_applied > settings['startrate']:
  84.                    if curr_rate_applied > settings['stop_loss_fixed']:
  85.                     print("Пора изменять stop-loss, новое значение {sl:0.8f}".format(sl=curr_rate_applied))
  86.                     settings['stop_loss_fixed'] = curr_rate_applied
  87.             else:
  88.                 # Текущая цена ниже или равна stop loss, продажа по рынку
  89.                 res = bot.createOrder(
  90.                     symbol=settings['symbol'],
  91.                     recvWindow=15000,
  92.                     side='SELL',
  93.                     type='MARKET',
  94.                     quantity=settings['amount']
  95.                 )
  96.                 print('Результат создания ордера', res)
  97.                 if 'orderId' in res:
  98.                     # Создание ордера прошло успешно, выход
  99.                     break
  100.         else:
  101.             # Выбрана стратегия Short, пытаемся купить монеты как можно выгоднее
  102.             if curr_rate < settings['stop_loss_fixed']:
  103.                 print("Текущая цена ниже stop-loss")
  104.                 if curr_rate_applied < settings['stop_loss_fixed']:
  105.                     print("Пора изменять stop-loss, новое значение {sl:0.8f}".format(sl=curr_rate_applied))
  106.                     settings['stop_loss_fixed'] = curr_rate_applied
  107.             else:
  108.                 # Цена поднялась выше Stop-Loss, Покупка по рынку
  109.                 quantity = math.floor((settings['amount']/curr_rate)*(1/step_sizes[settings['symbol']]))/(1/step_sizes[settings['symbol']])
  110.                 print("Цена поднялась выше Stop-Loss, Покупка по рынку, кол-во монет {quantity:0.8f}".format(quantity=quantity))
  111.                 # math.Floor(coins*(1/stepSize)) / (1 / stepSize)
  112.                 res = bot.createOrder(
  113.                     symbol=settings['symbol'],
  114.                     recvWindow=15000,
  115.                     side='BUY',
  116.                     type='MARKET',
  117.                     quantity=quantity
  118.                 )
  119.                 print('Результат создания ордера', res)
  120.                 if 'orderId' in res:
  121.                     # Создание ордера прошло успешно, выход
  122.                     break
  123.  
  124.     except Exception as e:
  125.         print(e)
  126.     time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement