策略年化261%,多平台复现确保没有未来函数 | aitrader 5.0桌面版本回测+实盘一体(python代码+数据下载)
toolbar.AddTool(3, "AI量化实验室官网", wx.ArtProvider.GetBitmap(wx.ART_GO_HOME), "打开AI实验室")toolbar.AddTool(8, "策略优选", wx.ArtProvider.GetBitmap(wx.ART_GO_FORWARD), "打开AI实验室商城")——实盘接口也会对接,而且是以散户能接受的低门槛的方式。conf
原创内容第842篇,专注智能量化投资、个人成长与财富自由。
做"AI量化实验室"这几年,观察用户认为的刚需。
一是策略,二是实盘。
看到策略之后,大家总会问能不能自动化,能不能直接运行。
之前我一直说,自动化其实是量化里相对比较简单的事情了。
实盘有一个难点是数据,尤其是实时的盘中数据,事件驱动的引擎设计。这一点与回测不同,回测系统多数可以通过低频的,向量化的计算来完成。另一个就是API对接,细节比较多,不过现在成熟的接口也不少了。

5.0之后给大家交付的软件长这样,系统代码和策略都是打包交付的。
可以从咱们服务器自动更新数据,更新策略,查看策略运行结果,而且支持回测和实盘一体的回测引擎。

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

大家可能要问,与商业化平台有什么区别啊?
商业软件当然非常好,数据质量高,又支持tick级别,稳定。
唯一的缺点可能就是价格高吧,本身就是to B为主,不是给散户准备的。
有这样的用户痛点,结合自己这十多年来做量化的经验,我想而向C端散户做一个软件。
与传统不同在于,开源,有二次开发能力的同学,完全可以自主定义。代码全交付,策略代码参数也全都可以查看。
数据自动更新到本地。
回测引擎与实盘一体。——这一点上,传统软件更强化实盘,我们更强调,如何低成本,低代码做出策略。——实盘接口也会对接,而且是以散户能接受的低门槛的方式。
代码下载地址:
咱们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总结说:
-
明确核心需求:列出你在关系或合作中不可妥协的底线(例如诚信、尊重)。
-
观察而非说服:通过行为而非语言判断一个人("看他们做什么,而不是听他们说什么")。
-
及时止损:发现根本性不匹配时,果断调整关系,而非陷入"改造幻想"。
-
提倡一种现实主义智慧:把有限的生命投入与那些"本就值得"的人共建关系,而非执着于改造不可能的人。这背后是对人性复杂性的清醒认知,也是对自我价值的保护。
代码和数据下载: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代码+数据)
更多推荐


所有评论(0)