@AlexHDreal

Отображение линейного графика не даёт запуститься другой функции, которая должна находиться в цикле, что делать?

Код должен при помощи функции "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)
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы