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()
openSUSE Build Service is sponsored by