вопрос решен - добавил три функции ниже в QuikPy, все заработало. пример функции для вызова в роботе:
Код |
---|
def get_account_summary(self):
"""Получает сводку по счету: дату, свободные средства и прибыль/убыток в %"""
# Инициализация переменных значениями по умолчанию
free_money = "0.0"
currency_code = "SUR"
profit_percentage = 0.0
profit_loss = 0.0
try:
# Получаем первый счет (основной)
accounts = self.qp.accounts
if not accounts:
self.logger.info("Нет доступных счетов")
return free_money, currency_code, profit_percentage
account = accounts[0] # Берем первый счет
firm_id = account['firm_id']
client_code = account['client_code']
# Получаем текущую дату
current_date = datetime.now(self.qp.tz_msk).strftime('%d.%m.%Y')
# Получаем свободные средства T1
money_limits = self.qp.get_money_limits()['data']
firm_money_limits = [ml for ml in money_limits if ml['firmid'] == firm_id and ml['limit_kind'] == 1]
if firm_money_limits:
free_money = firm_money_limits[0]['currentbal']
currency_code = firm_money_limits[0]['currcode']
# Получаем прибыль/убыток в %
profit_percentage = self.qp.get_daily_profit_percentage(firm_id, client_code, 1)
profit_loss = self.qp.get_daily_profit_loss(firm_id, client_code, 1)
# Выводим результат (теперь переменные определены)
self.logger.info(current_date)
self.logger.info(f"T1: Свободные средства {free_money} {currency_code}")
self.logger.info(f"T1: Прибыль/убыток %: {profit_percentage:.2f}%")
self.logger.info(f"T1: Прибыль/убыток дня: {profit_loss:.2f} {currency_code}")
except Exception as e:
self.logger.error(f"Ошибка при получении данных: {e}")
return free_money, currency_code, profit_percentage, profit_loss
|
что добавить в QuikPy:
Код |
---|
def get_daily_profit_loss(self, firm_id, client_code, limit_kind=0, trans_id=0):
"""Получение прибыли/убытка дня
:param str firm_id: Код фирмы
:param str client_code: Код клиента
:param int limit_kind: Срок расчетов (0-T0, 1-T1, 365-T365)
:param int trans_id: Код транзакции
:return: Прибыль/убыток дня
"""
portfolio = self.get_portfolio_info_ex(firm_id, client_code, limit_kind, trans_id)
if portfolio and 'data' in portfolio:
profit_loss = portfolio['data'].get('profit_loss')
if profit_loss is not None:
return float(profit_loss)
return 0.0
def get_daily_profit_percentage(self, firm_id, client_code, limit_kind=0, trans_id=0):
"""Получение прибыли/убытка дня в процентах
:param str firm_id: Код фирмы
:param str client_code: Код клиента
:param int limit_kind: Срок расчетов
:param int trans_id: Код транзакции
:return: Прибыль/убыток дня в %
"""
portfolio = self.get_portfolio_info_ex(firm_id, client_code, limit_kind, trans_id)
if portfolio and 'data' in portfolio:
data = portfolio['data']
portfolio_value = data.get('portfolio_value')
profit_loss = data.get('profit_loss')
if portfolio_value and profit_loss and float(portfolio_value) != 0:
portfolio_value_float = float(portfolio_value)
profit_loss_float = float(profit_loss)
return (profit_loss_float / portfolio_value_float) * 100
return 0.0
def get_portfolio_value(self, firm_id, client_code, limit_kind=0, trans_id=0):
"""Получение стоимости портфеля
:param str firm_id: Код фирмы
:param str client_code: Код клиента
:param int limit_kind: Срок расчетов
:param int trans_id: Код транзакции
:return: Стоимость портфеля
"""
portfolio = self.get_portfolio_info_ex(firm_id, client_code, limit_kind, trans_id)
if portfolio and 'data' in portfolio:
portfolio_value = portfolio['data'].get('portfolio_value')
if portfolio_value is not None:
return float(portfolio_value)
return 0.0
|