Код должен при помощи функции "stocks" подгружать данные котировок в базу, поэтому он должен быть в цикле.
А функция "animate" создаёт линейный график меняющийся в реальном времени считывая данные из базы.
НО ЭТИ ФУНКЦИИ НЕ МОГУТ РАБОТАТЬ ОДНОВРЕМЕННО.
Если запустить сначала "animate", то "stocks" не запускается.
Если запустить цикл "stocks", то не запускается "animate"
# Подключаемся к Binance Api
from binance.client import Client
from binance.streams import BinanceSocketManager
# Работа со временем
import time
import datetime
# Работа с вычислениями
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Работа с базой данных
from SQ import SQLighter
# Многопоточность
from threading import Thread
# Api key
api_key = '*********'
# Secret Api key
api_secret = '*********'
# Подключаем базу данных
DATACRY = SQLighter('X:\\TELEGRAMM\\КРИПТА ПИТОН\\DATATRADE\\DATACRY.db')
pricesD = DATACRY.get_prices()
dateD = DATACRY.get_date()
# Работа с графиком
fig = plt.figure()
#creating a subplot
ax1 = fig.add_subplot(1,1,1)
# Client
client = Client(api_key, api_secret)
# Рынок
ASSET = 'DOGEUSDT'
# Торгуемая валюта
CURRENCY = 'USDT'
# Торгуемая криптовалюта
CRYPTOCURRENCY = 'DOGE'
# Стартовый капитал криптовалюты
START_CRYPTOCURRENCY = 1
''' Б а л а н с '''
def balance(symbol):
balance = client.get_asset_balance(asset=symbol)
balance = {'free': balance['free'], 'locked':balance['locked']}
return balance
''' И с т о р и я '''
def history(symbol):
history = client.get_my_trades(symbol=symbol)
return history
''' К у р с '''
def price(symbol):
price = client.get_avg_price(symbol=symbol)['price']
return float(price)
''' П о к у п к а '''
def order_market_buy(quantity):
order = client.order_market_buy(symbol=ASSET, quantity=quantity)
''' П р о д а ж а '''
def order_market_sell(quantity):
order = client.order_market_sell(symbol=ASSET, quantity=quantity)
# Время обновления курса
TIME = 1
# Процент при котором будет совершена покупка
GROW_PERCENT = 0.5
# Процент при котором будет совершена продажа
FALL_PERCENT = -0.25
''' А л г о р и т м '''
def stocks(FIRST_PRICE):
# Функция обрезает число до n кол-во символов(Нужна чтобы при покупки и продажи не возникло ошибки)
def toFixed(f: float, n=0):
a, b = str(f).split('.')
return '{}.{}{}'.format(a, b[:n], '0'*(n-len(b)))
# Узнаём дату и время цены
now = datetime.datetime.now()
FULLDATE = now.strftime("%d.%m.%Y / %H:%M:%S")
date = now.strftime('%d')
month = now.strftime('%m')
year = now.strftime('%Y')
hour = now.strftime('%H')
minutes = now.strftime('%M')
seconds = now.strftime('%S')
# Засыпаем
time.sleep(TIME)
# Получаем новую цену
PRICEnow = price(ASSET)
# Процентное изменение
PROCENT = ((PRICEnow - FIRST_PRICE) / FIRST_PRICE) * 100
# Сумма начального депозита в USDT
BANKUSD = 666
# КОЛИЧЕСТВО ЕДИНИЦ КРИПТОВАЛЮТЫ
BANKCRYP = (BANKUSD / START_PRICE)
# Сумма депозита в USD в реальном времени
BANKUSDLIVE = PRICEnow*BANKCRYP
# Расчёт прибыли
STOCK = (BANKUSDLIVE - BANKUSD)
# Заносим котировки в базу
date = FULLDATE
prices = PRICEnow
DATACRY.add_info(date, prices)
print('Цена: '+ str(PRICEnow), 'Средства: '+ str(BANKUSDLIVE)+' $', 'Прибыль: '+ str(STOCK)+' $ ', str(FULLDATE))
# Стартовые значения
START_PRICE = price(ASSET)
# ГРАФИК
def animate(i):
ys = sum(map(list, pricesD), [])
xs = sum(map(list, dateD), [])
ax1.clear()
ax1.plot(xs, ys)
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Live graph with matplotlib')
ani = animation.FuncAnimation(fig, animate, interval=1000)
plt.show()
# Запускаем цикл
while True:
stocks(START_PRICE)