mainwindow.py
"""
AI Quant 图形化界面主程序
保留 VNpy 原生操作逻辑
"""
import sys
import os
import logging
import argparse
from PySide6.QtWidgets import (QApplication, QMainWindow, QTextEdit,
QVBoxLayout, QWidget)
from PySide6.QtGui import QAction
# 添加项目根目录到路径
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.gui")
class MainWindow(QMainWindow):
"""
AI Quant 主窗口
"""
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
"""
初始化用户界面
"""
self.setWindowTitle("AI Quant - A 股量化交易框架")
self.setGeometry(100, 100, 1200, 800)
# 创建中心部件
central_widget = QWidget()
self.setCentralWidget(central_widget)
# 创建布局
layout = QVBoxLayout(central_widget)
# 创建文本编辑区域
self.text_edit = QTextEdit()
self.text_edit.setReadOnly(True)
layout.addWidget(self.text_edit)
# 创建菜单
self.create_menu()
# 显示欢迎信息
self.show_welcome_message()
def create_menu(self):
"""
创建菜单
"""
menubar = self.menuBar()
# 文件菜单
file_menu = menubar.addMenu("文件")
exit_action = QAction("退出", self)
exit_action.setShortcut("Ctrl+Q")
exit_action.triggered.connect(self.close)
file_menu.addAction(exit_action)
# 交易菜单
trade_menu = menubar.addMenu("交易")
connect_action = QAction("连接行情", self)
connect_action.setShortcut("Ctrl+C")
connect_action.triggered.connect(self.connect_market)
trade_menu.addAction(connect_action)
disconnect_action = QAction("断开行情", self)
disconnect_action.setShortcut("Ctrl+D")
disconnect_action.triggered.connect(self.disconnect_market)
trade_menu.addAction(disconnect_action)
# 策略菜单
strategy_menu = menubar.addMenu("策略")
load_strategy_action = QAction("加载策略", self)
load_strategy_action.setShortcut("Ctrl+L")
load_strategy_action.triggered.connect(self.load_strategy)
strategy_menu.addAction(load_strategy_action)
run_strategy_action = QAction("运行策略", self)
run_strategy_action.setShortcut("Ctrl+R")
run_strategy_action.triggered.connect(self.run_strategy)
strategy_menu.addAction(run_strategy_action)
# 回测菜单
backtest_menu = menubar.addMenu("回测")
run_backtest_action = QAction("运行回测", self)
run_backtest_action.setShortcut("Ctrl+B")
run_backtest_action.triggered.connect(self.run_backtest)
backtest_menu.addAction(run_backtest_action)
# 帮助菜单
help_menu = menubar.addMenu("帮助")
about_action = QAction("关于", self)
about_action.triggered.connect(self.show_about)
help_menu.addAction(about_action)
def show_welcome_message(self):
"""
显示欢迎信息
"""
welcome_text = """
<h1>AI Quant - A 股量化交易框架</h1>
<p>欢迎使用 AI Quant,基于 VNpy 4.3.0 重构的 A 股量化交易框架。</p>
<h2>项目特性</h2>
<ul>
<li>保留 VNpy 原生所有 A 股交易/回测/风控/招商证券对接/图形界面能力</li>
<li>采用三层架构设计:核心接口层、服务引擎层、应用策略层</li>
<li>仅保留 A 股相关功能,精简非必要代码</li>
<li>统一配置管理,接口标准化</li>
<li>支持大模型推理插件</li>
<li>招商证券专属对接优化</li>
<li>单票量化策略专用模块</li>
</ul>
<h2>快速开始</h2>
<ol>
<li>配置招商证券接口参数(config/zs_sec_config.py)</li>
<li>安装项目依赖(pip install -r requirements.txt)</li>
<li>加载策略或运行回测</li>
</ol>
<p>如需帮助,请查看帮助菜单或访问项目文档。</p>
"""
self.text_edit.setHtml(welcome_text)
logger.info("AI Quant 图形化界面启动成功")
def connect_market(self):
"""
连接行情
"""
logger.info("连接行情")
self.text_edit.append("<p><b>连接行情中...</b></p>")
def disconnect_market(self):
"""
断开行情
"""
logger.info("断开行情")
self.text_edit.append("<p><b>行情已断开</b></p>")
def load_strategy(self):
"""
加载策略
"""
logger.info("加载策略")
self.text_edit.append("<p><b>策略加载中...</b></p>")
def run_strategy(self):
"""
运行策略
"""
logger.info("运行策略")
self.text_edit.append("<p><b>策略运行中...</b></p>")
def run_backtest(self):
"""
运行回测
"""
logger.info("运行回测")
self.text_edit.append("<p><b>回测运行中...</b></p>")
def show_about(self):
"""
显示关于信息
"""
about_text = """
<h2>关于 AI Quant</h2>
<p>AI Quant 是基于 VNpy 4.3.0 重构的 A 股量化交易框架。</p>
<h3>项目信息</h3>
<ul>
<li>版本: 1.0.0</li>
<li>作者: AI Quant Team</li>
<li>许可证: MIT</li>
<li>项目地址: https://github.com/aiquant/aiquant</li>
</ul>
<h3>联系方式</h3>
<ul>
<li>官方网站: https://www.quantquantquant.com</li>
<li>文档中心: https://docs.quantquantquant.com</li>
<li>社区论坛: https://forum.quantquantquant.com</li>
<li>联系邮箱: support@quantquantquant.com</li>
</ul>
"""
self.text_edit.setHtml(about_text)
def run_gui(config_file: str = "config/main_config.py"):
"""
运行图形化界面
Args:
config_file: 配置文件路径
"""
logger.info("启动 AI Quant 图形化界面")
logger.info(f"配置文件: {config_file}")
app = QApplication(sys.argv)
try:
window = MainWindow()
window.show()
logger.info("AI Quant 图形化界面启动成功")
sys.exit(app.exec())
except Exception as e:
logger.error(f"启动图形化界面失败: {e}")
logger.exception("详细错误信息:")
sys.exit(1)
if __name__ == "__main__":
# 解析命令行参数
parser = argparse.ArgumentParser(
description="AI Quant 图形化界面"
)
parser.add_argument(
"--config",
default="config/main_config.py",
help="配置文件路径"
)
args = parser.parse_args()
# 运行图形化界面
run_gui(args.config)