Advertisement
Guest User

Untitled

a guest
Mar 30th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 KB | None | 0 0
  1. from datetime import datetime
  2. from time import localtime, sleep, strftime
  3.  
  4. from binance.client import Client
  5. from binance.exceptions import BinanceAPIException
  6.  
  7. import os
  8. import psycopg2.extras
  9.  
  10.  
  11. API_KEY = 'Ioa5gkMpSm4qnqj15WYS3QrTGDoaPjzRMRnRPyhWOkVVk4NBwsEPta1EUDrV3oyr'
  12. API_SECRET = 'SN8q3uLcQEYXacZjBsYnwb4qGInAxGtKmEDZjN8XefkDxrBThuJF6OSewgCKbEdh'
  13.  
  14. # how often the data should be gathered -- seconds
  15. DATA_GATHERING_SLEEP = 5
  16.  
  17. # the percentage when the user should be announced of a change
  18. PERCENTAGE_THRESHOLD = 3.00
  19.  
  20.  
  21. # database
  22.  
  23. DB_NAME = 'binance'
  24. DB_USER = 'a'
  25. DB_PASS = '1q'
  26.  
  27. class BinanceStockerProcessor:
  28.  
  29. def __init__(self):
  30. try:
  31. self.client = Client(API_KEY, API_SECRET)
  32. except BinanceAPIException as e:
  33. print(e)
  34.  
  35. self.db_connection = psycopg2.connect(database=DB_NAME, user=DB_USER, password=DB_PASS)
  36. self.db_cursor = self.db_connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
  37.  
  38. self.tickers = self.client.get_all_tickers()
  39.  
  40. def calculate_percentage(self):
  41.  
  42. for ticker in self.tickers:
  43. now = strftime("%Y-%m-%d %H:%M:%S", localtime())
  44.  
  45. # write currencies to DB
  46. self.db_cursor.execute("""
  47. INSERT INTO binance (date, symbol, price)
  48. VALUES (%s,%s,%s)
  49. """, (now, ticker['symbol'], ticker['price']))
  50. self.db_connection.commit()
  51.  
  52. # get data from db
  53. self.db_cursor.execute("""
  54. SELECT * FROM binance
  55. WHERE symbol=%s
  56. ORDER BY date DESC LIMIT 1
  57. """, (ticker['symbol'].upper(),))
  58.  
  59. rows_now = self.db_cursor.fetchall()
  60. if not rows_now:
  61. continue
  62. self.db_cursor.execute("""
  63. SELECT * FROM binance
  64. WHERE symbol=%s
  65. AND date >= NOW() AT TIME ZONE 'EET' - INTERVAL '15 seconds'
  66. ORDER BY date ASC
  67. """, (ticker['symbol'].upper(),))
  68.  
  69. rows_10s = self.db_cursor.fetchall()
  70. if not rows_10s:
  71. continue
  72. self.db_cursor.execute("""
  73. SELECT * FROM binance
  74. WHERE symbol=%s
  75. AND date >= NOW() AT TIME ZONE 'EET' - INTERVAL '1 minutes'
  76. ORDER BY date ASC
  77. """, (ticker['symbol'].upper(),))
  78.  
  79. rows_1min = self.db_cursor.fetchall()
  80. if not rows_1min:
  81. continue
  82. self.db_cursor.execute("""
  83. SELECT * FROM binance
  84. WHERE symbol=%s
  85. AND date >= NOW() AT TIME ZONE 'EET' - INTERVAL '5 minutes'
  86. ORDER BY date ASC
  87. """, (ticker['symbol'].upper(),))
  88.  
  89. rows_5min = self.db_cursor.fetchall()
  90. if not rows_5min:
  91. continue
  92. date_now, symbol_now, price_now = self.get_rows_data(rows_now)
  93. date_10s, symbol_10s, price_10s = self.get_rows_data(rows_10s)
  94. date_1min, symbol_1min, price_1min = self.get_rows_data(rows_1min)
  95. date_5min, symbol_5min, price_5min = self.get_rows_data(rows_5min)
  96.  
  97. percentage_10s = round(self.get_percentage(price_now, price_10s), 2)
  98. percentage_1min = round(self.get_percentage(price_now, price_1min), 2)
  99. percentage_5min = round(self.get_percentage(price_now, price_5min), 2)
  100.  
  101. if percentage_5min >= PERCENTAGE_THRESHOLD:
  102. # print(
  103. # f"{ticker['symbol']}: "
  104. # f"({datetime.strftime(date_now, '%Y-%m-%d %H:%M:%S')} | {price_now}) "
  105. # f"({datetime.strftime(date_10s, '%Y-%m-%d %H:%M:%S')} | {percentage_10s} | {price_10s}) "
  106. # f"({datetime.strftime(date_1min, '%Y-%m-%d %H:%M:%S')} | {percentage_1min} | {price_1min}) "
  107. # f"({datetime.strftime(date_5min, '%Y-%m-%d %H:%M:%S')} | {percentage_5min} | {price_5min})"
  108. # )
  109. #os.system("firefox -new-tab -url https://www.binance.com/trade.html?symbol=" + ticker['symbol'][:3] + "_" + ticker['symbol'][-3:])
  110. print(
  111. f"🚀 Binance {ticker['symbol'][:3]}-BTC"
  112. f"Price: ({percentage_5min}%/5min)"
  113. f"({percentage_1min}%/1min)"
  114. f"({percentage_10s}%/10s)\n"
  115. f"
  116. )
  117.  
  118.  
  119. @staticmethod
  120. def get_percentage(now, old):
  121. if now == old:
  122. return 0
  123.  
  124. try:
  125. return ((now - old) / old) * 100.0
  126. except ZeroDivisionError:
  127. return 0
  128.  
  129. @staticmethod
  130. def get_rows_data(data):
  131. if len(data) >= 1:
  132. return data[0][0], data[0][1], data[0][2]
  133. else:
  134. print('Error here! Will exit now...')
  135. return
  136.  
  137.  
  138. def main():
  139. while True:
  140. binance = BinanceStockerProcessor()
  141. binance.calculate_percentage()
  142. sleep(DATA_GATHERING_SLEEP)
  143.  
  144.  
  145. if __name__ == '__main__':
  146. try:
  147. main()
  148. except KeyboardInterrupt:
  149. print('Exiting now...')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement