File main_stats.py of Package fint-bot
#!/usr/bin/env python3
"""
Скрипт для просмотра статистики торгового робота
"""
import sys
from pathlib import Path
from robotlib.statistics import BalanceProcessor, BalanceCalculator, TradeStatisticsAnalyzer
def main():
"""Основная функция для отображения статистики"""
print("=" * 50)
print("ПРОСМОТР СТАТИСТИКИ ТОРГОВОГО РОБОТА")
print("=" * 50)
# Пробуем загрузить статистику из разных мест
stats_files = [
'stats.pickle',
'stats_data/stats.pickle',
'stats_data/backtest_stats.pickle'
]
stats = None
for filename in stats_files:
try:
print(f"Пробуем загрузить {filename}...")
stats = TradeStatisticsAnalyzer.load_from_file(filename)
print(f"Успешно загружено из {filename}")
break
except FileNotFoundError:
continue
except Exception as e:
print(f"Ошибка при загрузке {filename}: {e}")
continue
if stats is None:
print("Файл статистики не найден. Возможные причины:")
print("1. Робот еще не запускался")
print("2. Файл статистики удален")
print("3. Неправильный путь к файлу")
print("\nПопробуйте запустить main.py для создания статистики")
sys.exit(1)
# Генерация отчета
print("\n" + "=" * 50)
print("ГЕНЕРАЦИЯ ОТЧЕТА")
print("=" * 50)
try:
short_report, full_report = stats.get_report(
processors=[BalanceProcessor()],
calculators=[BalanceCalculator()]
)
print("\nКРАТКАЯ СТАТИСТИКА:")
print("-" * 30)
for key, value in short_report.items():
print(f"{key:25}: {value:10.2f}")
print("\nПОЛНЫЙ ОТЧЕТ (первые 10 строк):")
print("-" * 80)
if not full_report.empty:
print(full_report.head(10).to_string())
# Сохраняем полный отчет в CSV для удобства
csv_path = "stats_data/full_report.csv"
full_report.to_csv(csv_path, index=False)
print(f"\nПолный отчет сохранен в: {csv_path}")
# Базовая статистика по сделкам
print("\nОСНОВНЫЕ МЕТРИКИ:")
print("-" * 30)
print(f"Всего сделок: {len(full_report)}")
if 'direction' in full_report.columns:
buys = full_report[full_report['direction'] == 1].shape[0]
sells = full_report[full_report['direction'] == 2].shape[0]
print(f"Покупок: {buys}")
print(f"Продаж: {sells}")
if 'total_order_amount' in full_report.columns:
total_turnover = full_report['total_order_amount'].sum()
print(f"Общий оборот: {total_turnover:.2f}")
else:
print("Нет данных для отображения")
except Exception as e:
print(f"Ошибка при генерации отчета: {e}")
import traceback
traceback.print_exc()
sys.exit(1)
print("\n" + "=" * 50)
print("ОТЧЕТ СФОРМИРОВАН УСПЕШНО")
print("=" * 50)
if __name__ == '__main__':
main()