console.py

"""
AI Quant 控制台模式主程序
"""

import sys
import os
import logging
import argparse

# 添加项目根目录到路径
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
    handlers=[
        logging.FileHandler("aiquant.log"),
        logging.StreamHandler()
    ]
)

logger = logging.getLogger("AIQuant.console")

# 导入控制台配置
from config.console_config import (
    CONSOLE_COMMANDS,
    CONSOLE_WELCOME,
    CONSOLE_PROMPT,
    CONSOLE_UNKNOWN_COMMAND,
    CONSOLE_EXIT_MESSAGE
)


def run_console(config_file: str = "config/main_config.py"):
    """
    运行控制台模式

    Args:
        config_file: 配置文件路径
    """
    logger.info("启动 AI Quant 控制台模式")
    logger.info(f"配置文件: {config_file}")

    try:
        # 显示欢迎信息
        print(CONSOLE_WELCOME)
        for command, info in CONSOLE_COMMANDS.items():
            print(f"  {command:<10} - {info['description']}")
        print()

        # 主循环
        while True:
            command = input(CONSOLE_PROMPT).strip().lower()

            if command == "quit" or command == "q":
                logger.info("程序退出")
                print(CONSOLE_EXIT_MESSAGE)
                break
            elif command == "help" or command == "h":
                print()
                print("可用命令:")
                for cmd, info in CONSOLE_COMMANDS.items():
                    print(f"  {cmd:<10} - {info['description']}")
                print()
            elif command == "connect":
                logger.info("连接行情")
                print("连接行情中...")
            elif command == "disconnect":
                logger.info("断开行情")
                print("行情已断开")
            elif command == "load":
                logger.info("加载策略")
                print("策略加载中...")
            elif command == "run":
                logger.info("运行策略")
                print("策略运行中...")
            elif command == "backtest":
                logger.info("运行回测")
                print("回测运行中...")
            else:
                print(CONSOLE_UNKNOWN_COMMAND.format(command))

        logger.info("AI Quant 控制台模式正常退出")
        return 0
    except Exception as e:
        logger.error(f"控制台模式运行失败: {e}")
        logger.exception("详细错误信息:")
        return 1


if __name__ == "__main__":
    # 解析命令行参数
    parser = argparse.ArgumentParser(
        description="AI Quant 控制台模式"
    )
    parser.add_argument(
        "--config",
        default="config/main_config.py",
        help="配置文件路径"
    )

    args = parser.parse_args()

    # 运行控制台模式
    sys.exit(run_console(args.config))