原创内容第842篇,专注智能量化投资、个人成长与财富自由。

做"AI量化实验室"这几年,观察用户认为的刚需。

一是策略,二是实盘。

看到策略之后,大家总会问能不能自动化,能不能直接运行。

之前我一直说,自动化其实是量化里相对比较简单的事情了。

实盘有一个难点是数据,尤其是实时的盘中数据,事件驱动的引擎设计。这一点与回测不同,回测系统多数可以通过低频的,向量化的计算来完成。另一个就是API对接,细节比较多,不过现在成熟的接口也不少了。

图片

5.0之后给大家交付的软件长这样,系统代码和策略都是打包交付的。

可以从咱们服务器自动更新数据,更新策略,查看策略运行结果,而且支持回测和实盘一体的回测引擎。

图片

当前平台上,最好的这个策略的运行结果:

图片

大家可能要问,与商业化平台有什么区别啊?

商业软件当然非常好,数据质量高,又支持tick级别,稳定。

唯一的缺点可能就是价格高吧,本身就是to B为主,不是给散户准备的。

有这样的用户痛点,结合自己这十多年来做量化的经验,我想而向C端散户做一个软件。

与传统不同在于,开源,有二次开发能力的同学,完全可以自主定义。代码全交付,策略代码参数也全都可以查看。

数据自动更新到本地。

回测引擎与实盘一体。——这一点上,传统软件更强化实盘,我们更强调,如何低成本,低代码做出策略。——实盘接口也会对接,而且是以散户能接受的低门槛的方式。

代码下载地址:

AI量化实验室——2025量化投资的星辰大海

咱们gui的代码基于wxpython的aui驱动:

图片

import os
import time

import wx
import wx.lib.agw.aui as aui

from gui.dlg_config import ConfigDialog
from gui.mainframe_left import LeftNotebook
from gui.mainframe_log_panel import LogPanel
from gui.mainframe_right import RightNotebook
from gui.widgets.widget_web import WebPanel


class MainFrame(wx.Frame):
    def __init__(self, *args, **kw):

        super().__init__(parent=None, title="aiTrader 5.0 - AI智能量化投研平台", style=wx.DEFAULT_FRAME_STYLE | wx.MAXIMIZE_BOX)
        self.Maximize()
        # 设置程序图标
        icon_file = "gui/imgs/logo.ico"
        icon = wx.Icon(icon_file, wx.BITMAP_TYPE_ICO)
        self.SetIcon(icon)

        self.init_statusbar()
        self.init_menu_bar()
        #self.init_main_ui()
        self.init_toolbar()
        #self.init_aui()

        self.web = None
        wx.CallAfter(self.init_aui)


    def init_aui(self):
        # 创建AUI管理器 - 确保使用 wx.lib.agw.aui.AuiManager
        self.mgr = aui.AuiManager(self)
        #self.mgr.SetAGWW()

        #设置AUI样式 - 使用AGW特有的方法
        self.mgr.SetAGWFlags(
            aui.AUI_MGR_DEFAULT |
            aui.AUI_MGR_TRANSPARENT_DRAG |
            aui.AUI_MGR_ALLOW_ACTIVE_PANE |
            aui.AUI_MGR_RECTANGLE_HINT
        )

        # 创建左侧notebook
        self.left_notebook = LeftNotebook(self)

        # 创建右侧notebook
        self.right_notebook = RightNotebook(self)


        # 创建日志面板
        self.log_panel = LogPanel(self)

        # 添加面板到AUI管理器
        self.mgr.AddPane(self.left_notebook,
                         aui.AuiPaneInfo().Name("left_pane").Left().Layer(0)
                         .Caption("功能导航").CloseButton(False).PinButton(True)
                         .BestSize(250, -1))

        self.mgr.AddPane(self.right_notebook,
                         aui.AuiPaneInfo().Name("center_pane").CenterPane())

        self.mgr.AddPane(self.log_panel,
                         aui.AuiPaneInfo().Name("log_pane").Bottom()
                         .Caption("日志输出").CloseButton(False).BestSize(-1, 150))

        # 更新AUI管理器
        self.mgr.Update()

        # 绑定事件
        self.Bind(wx.EVT_CLOSE, self.on_close)

    def on_close(self, event):
        self.mgr.UnInit()
        event.Skip()




    def init_menu_bar(self):
        # 创建窗口面板
        menuBar = wx.MenuBar(style=wx.MB_DOCKABLE)
        self.SetMenuBar(menuBar)
        self.SetMinSize((1618, 902))

        setting = wx.Menu()
        menuBar.Append(setting, "&设置")
        params_conf = wx.MenuItem(setting, 0, "&参数配置")
        setting.Append(params_conf)
        self.Bind(wx.EVT_MENU, self.on_params_conf, params_conf)

        tools = wx.Menu()
        menuBar.Append(tools, "&工具")

        tools.AppendSeparator()

        website = wx.MenuItem(tools, 3, "&AI量化实验室官网")
        tools.Append(website)
        self.Bind(wx.EVT_MENU, self.on_menu, website)

        mall = wx.MenuItem(tools, 8, "&策略优选")
        tools.Append(mall)
        self.Bind(wx.EVT_MENU, self.on_menu, mall)



        # Now a help menu for the about item
        helpMenu = wx.Menu()
        aboutItem = helpMenu.Append(10, "关于")
        menuBar.Append(helpMenu, "&帮助")

    def on_menu(self, event):
        if event.Id == 0:
            self.on_params_conf(event)
            return
        if event.Id == 10:
            self.OnAbout(event)
            return

        if not self.web:
            self.web = WebPanel(self.right_notebook)
            self.right_notebook.AddPage(self.web, "浏览器")

        page_index = self.right_notebook.FindPage(self.web)  # 找到 self.web 所在的页索引
        self.right_notebook.SetSelection(page_index)  # 切换到该页



        page_title = '浏览器'
        if event.Id == 1:
            self.web.show_url("https://danjuanapp.com/djmodule/value-center")
            page_title = '指数估值'
  
        if event.Id == 3:
            self.web.show_url("http://ailabx.com")
            page_title = '官网'
        if event.Id == 8:
            self.web.show_url("http://ailabx.com/mall")
            page_title = '策略优选'

        self.right_notebook.SetPageText(page_index, page_title)


    def on_params_conf(self, event):
        dlg = ConfigDialog(self)
        if dlg.ShowModal() == wx.ID_OK:
            print("配置已保存")
        dlg.Destroy()

    def OnAbout(self, event):
        wx.MessageBox(
            "公众号: 七年实现财富自由",
            "关于 aiTrader 智能量化投研平台",
            wx.OK | wx.ICON_INFORMATION,
        )

    def init_toolbar(self):
        # 创建工具栏
        toolbar = self.CreateToolBar(style=wx.TB_HORIZONTAL|wx.TB_TEXT)
        script_dir = os.path.dirname(os.path.abspath(__file__))

        # 加载自定义配置图标 - 使用相对路径 img/config.png
        toolbar.SetToolBitmapSize((20, 20))
        config_path = os.path.join(script_dir,"imgs", "配置管理.png")
        list_path = os.path.join(script_dir,"imgs", "群组.png")

        # 尝试加载自定义图标
        config_bmp = wx.Bitmap(config_path, wx.BITMAP_TYPE_PNG)

        toolbar.AddSeparator()


       
        toolbar.AddTool(3, "AI量化实验室官网", wx.ArtProvider.GetBitmap(wx.ART_GO_HOME), "打开AI实验室")
        toolbar.AddTool(8, "策略优选", wx.ArtProvider.GetBitmap(wx.ART_GO_FORWARD), "打开AI实验室商城")

        toolbar.AddTool(0, "系统配置", config_bmp, "打开系统配置")


        self.Bind(wx.EVT_TOOL, self.on_menu)
        toolbar.Realize()

    def init_statusbar(self):
        version = '5.0.0'
        self.statusBar = self.CreateStatusBar()  # 创建状态条
        # 将状态栏分割为3个区域,比例为4:1
        self.statusBar.SetFieldsCount(3)
        self.statusBar.SetStatusWidths([-4, -1, -1])
        t = time.localtime(time.time())
        self.SetStatusText("欢迎使用AI智能量化投研平台!请关注公众号: 七年实现财富自由", 0)
        self.SetStatusText("当前版本:%s" % str(version), 1)
        self.SetStatusText(time.strftime("%Y-%m-%d %I:%M:%S", t), 2)

        self.sys_timer = wx.Timer(self, id=wx.ID_ANY)
        self.sys_timer.Start(1000)
        self.Bind(wx.EVT_TIMER, self._update_sys_time, self.sys_timer)

    def _update_sys_time(self, event):
        t = time.localtime(time.time())
        self.SetStatusText(time.strftime("%Y-%m-%d %I:%M:%S", t), 2)




    def init_right_panel(self):
        right_panel = wx.Panel(self.main_panel)
        self.right_panel = right_panel
        right_sizer = wx.BoxSizer(wx.VERTICAL)

        # 右上方Notebook
        self.top_notebook = wx.Notebook(right_panel)

        # 市场数据面板
        self.market_panel = MarketDataPanel(self.top_notebook)
        self.top_notebook.AddPage(self.market_panel, "市场数据")



        # ...
        # 下方可折叠日志面板
        self.log_panel = LogPanel(right_panel)
        self.log_panel.SetMinSize((-1, 200))  # 设置最小高度为200


        # # 设置日志面板布局
        # log_sizer = wx.BoxSizer(wx.VERTICAL)
        # log_sizer.Add(self.log_panel, 1, wx.EXPAND)


        right_sizer.Add(self.top_notebook, 1, wx.EXPAND)
        right_sizer.Add(self.log_panel, 0, wx.EXPAND)
        right_panel.SetSizer(right_sizer)


        self.main_sizer.Add(right_panel, 1, wx.EXPAND)

吾日三省吾身

和朋友聊起,筛选还是改变的话题,我问deepseek,它给出的答案更加全面和深刻。

它说,人性和底层的价值观是长期形成的,不好改,就算能改也代价很大。

而筛选本身就契合的人,效率要高得多。亚马逊创始人贝索斯曾提到:"招聘时要想象这个人会成为你未来的同事,而非假设可以改变他们。"

另外,还有一个边界的问题。筛选本身就是对双方边界的尊重。

Deepseek总结说:

  1. 明确核心需求:列出你在关系或合作中不可妥协的底线(例如诚信、尊重)。

  2. 观察而非说服:通过行为而非语言判断一个人("看他们做什么,而不是听他们说什么")。

  3. 及时止损:发现根本性不匹配时,果断调整关系,而非陷入"改造幻想"。

  4. 提倡一种现实主义智慧:把有限的生命投入与那些"本就值得"的人共建关系,而非执着于改造不可能的人。这背后是对人性复杂性的清醒认知,也是对自我价值的保护。

代码和数据下载:AI量化实验室——2025量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1600+会员。

aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)

年化收益200%+的策略集 | 实时板块资金热力图 「aitrader 5.0系统代码发布」

年化19.66%,回撤12%的稳健策略|manus的启发:基于大模型多智能体的智能投研系统(python代码+数据)

年化30.24%,最大回撤19%,综合动量多因子评分策略再升级(python代码+数据)

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

stock-pandas,一个易用的talib的替代开源库。

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐