最新的代码:
Quantlab3.9代码:内置大模型LLM因子挖掘,全A股数据源以及自带GUI界面
01 关于zvt的数据存储
这两天读zvt的代码,挺有意思。
一直追求模块化的编码,zvt这方面做得还是不错的,而且编码风格良好,可读性很强。
估计是本地化的考量,zvt使用sqlite作为存储后端(不过看代码里,有留出配置,应该兼容所有sqlalchemy的关系型数据库都是可以的,比如mysql)。
不过金融数据,尤其是时间序列,个人还是比较喜欢mongo。
比如灵活高效。
另外,sqlite占用地方比较大,3000多支股票历史数据,已经2.5G左右:
从架构的角度,我们希望一次性更新数据——可能会从多个源整合数据,然后提供给前端回测和交易使用。
本地回测如果每次均从服务器同步数据,可能会比较慢。本地可以通过csv的方式来缓存(使用sqlite的好处是可以增量更新,不必每次都全量下载),通过csv简单直接,而且每天仅需要下载一次(或者每周一次也行,可以手动更新)。
我可能仍然会自己实现这份数据下载与存储方案,不过zvt给了不少有意思的启发!
02 Quantlab数据存储的设计
1、基础信息表:basic_fund,basic_index, basic_stock, basic_bond, basic_future这样的结构。drop后新增,一次性重建,这里的symbols都需要更新qotes。
record_data():get_data单独走api即可。
2、quotes_etf, quotes_stock, quotes_bond, quotes_future(考虑到回测效率,一般直接存储后复权数据,不过有些上市早的股票,股价看起来会特别高)。
3、财务基本面数据:类似时序数据,加载时需要fill数据。
4、其他数据:比如北向资金等。
5、query_data(type=’etf’,symbols=[], start_date, end_date,columns=[])
本地维持当前的dataloader不变,使用csv缓存时序数据。
吾日三省吾身
昨天听《月亮与六便士》。
说实话,主人公让人很不舒服。
这位艺术家抛妻舍业,远走他乡且不说;勾引人妻,致真心帮助他的好朋友家破人亡。。。——美其名曰,为了艺术。。。
其实,有梦想的人,是幸福的;勇敢追求梦想的人,是令人敬佩的。
不过,做人之底限,你可以放弃你自己,但不应伤害他人——以艺术之名。
我们搞科学的,确实欣赏不了艺术。
在科学领域,技术与商业是可以相互成就的。比如OpenAI的奥特曼,马斯克,爱迪生等,都是天才中的天才,也是富豪中的富豪,而且家庭还经营得很好。
追梦哪里一行,一定要以这样奇异的方式?
这本书可以畅销全世界??——满街都是六便士?只是它抬头看到的月亮??
马斯克眼里都是月亮,不妨碍他满口袋的六便士。
而且六便士才能让你更好的看月亮不是嘛?
正确的价值观,不只为钱而活,但良好的财务状况,更容易承载你的诗和远方。
身而为人,本身就要承担很多责任。而不是为了所谓的梦想,就放在为人之根本责任和义务,美其名曰心中只有“月亮”。
Quantlab希望做成一个桌面软件的形态,可以下载数据并做量化分析,可以跑策略,可以对接实盘。
比传统的看盘软件更好用更智能,比线上的量化社区安全(代码都给你)。
软件主体架构使用wxpython + streamlit。
一些下载数据的任务,软件配置等,使用传统GUI更方便,而与数据呈现,量化分析相关的功能,使用streamlit这样的框架更高效。因些我们把二者结果起来了。
代码都在GUI的目录下:
import wx from gui.widgets.widget_web import WebPanel from config import DATA_DIR def OnAbout(event): wx.MessageBox("公众号:ailabx", "关于 AI量化投研平台", wx.OK | wx.ICON_INFORMATION) def OnExit(win, event): win.Close(True) def make_menubar(win): # Make a file menu with Hello and Exit items fileMenu = wx.Menu() # The "\t..." syntax defines an accelerator key that also triggers # the same event helloItem = fileMenu.Append(-1, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item") fileMenu.AppendSeparator() # When using a stock ID we don't need to specify the menu item's # label exitItem = fileMenu.Append(wx.ID_EXIT, '退出') # Now a help menu for the about item helpMenu = wx.Menu() aboutItem = helpMenu.Append(wx.ID_ABOUT, '本软件') menuBar = wx.MenuBar() menuBar.Append(fileMenu, "&文件") menuBar.Append(helpMenu, "&帮助") win.Bind(wx.EVT_MENU, OnAbout, aboutItem) win.Bind(wx.EVT_MENU, OnExit, exitItem) return menuBar from .dialog_config import DialogConfig def tool_config_clicked( event ): ico = DATA_DIR.joinpath('images').joinpath('lab.ico') icon = wx.Icon(str(ico.resolve()), wx.BITMAP_TYPE_ICO) # self.SetIcon(icon) dlg = DialogConfig() dlg.ShowModal() class MainFrame(wx.Frame): def __init__(self, *args, **kw): super(MainFrame, self).__init__(*args, **kw) self.SetTitle('AI智能量化投研平台') # 设置默认大小 self.SetSize(wx.Size(900, 600)) ico = DATA_DIR.joinpath('images').joinpath('lab.ico') icon = wx.Icon(str(ico.resolve()), wx.BITMAP_TYPE_ICO) self.SetIcon(icon) # 屏幕居中显示 self.Centre() self.SetMenuBar(make_menubar(self)) self.tool_main = self.CreateToolBar(wx.TB_HORIZONTAL, wx.ID_ANY) tool_png = DATA_DIR.joinpath('images').joinpath('config.png') self.tool_config = self.tool_main.AddTool(wx.ID_ANY, u"配置", wx.Bitmap(str(tool_png.resolve()), wx.BITMAP_TYPE_ANY), wx.NullBitmap, wx.ITEM_NORMAL, wx.EmptyString, wx.EmptyString, None) self.tool_main.Realize() self.Maximize() self.CreateStatusBar() self.SetStatusText("欢迎使用AI智能量化投研平台!请关注公众号:ailabx") # Connect Events self.Bind(wx.EVT_TOOL, tool_config_clicked, id=self.tool_config.GetId()) # 主窗口notebook self.m_notebook = wx.Notebook(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) web = WebPanel(self.m_notebook) self.m_notebook.AddPage(web, '时间序列分析', True) web.show_url('http://localhost:8501') #self.m_notebook.AddPage(PanelBacktest(self.m_notebook), "可视化回测系统", True)
“AI量化实验室”的思考与调价的说明
昨晚大幅度调价,原因来自偶然的事件。
这个偶然的事情,提醒我重新思考星球的价值。
每天写代码,找前沿的思路,确实花了不少心血。
但代码之前很多初学者,确实有门槛,而我们又没有精力“手把手”地教大家,讲基础的python配置,配置的量化概念。
尤其我们最近上了大模型,openai, langchain,agent开发,因子挖掘之类的,对于新手就更加困难了。
所以,这也算一种筛选吧,避免大家加入之后反倒失望,这样不好。
我们要把有限的精力集中起来服务真正需要的人:
1、至少会编程吧,熟悉python和人工智能就很好了。自己能解决多数环境配置,代码调试的问题。
2、投资有基本概念吧,风险收益,对量化有热情而非只想拿一个策略去赚钱。(应该没有这种圣杯吧,如果有,你说它值多少钱吧)
如果仍然有兴趣一起学习、交流,那自然是非常欢迎。
吾日三省吾身
早上听李蕾讲苏东坡,有所悟。
写作者,其实重的不是文笔,而是观点、思想深度。
观点来自于读书,观察,深度思考和批判性思维。
这其实就是认知的体现,而人与人的高低区别,其实就是认知。
古代科举,写命题作文,其实有其道理。
反观当下数理化语数英,很分散,很多时候,在培养劳动力,而不是决策者。
当然,并不需要人人都杀伐决断。
只是说,在人群之中想脱颖而出,提升这种认知非常重要。
认知高手之外化表现,就是写出高水平的文章。
周岭在《认知驱动》里讲,他只写未来几年还有价值的文章,不追热点和所谓十万+,个人深以为然。
写对自己,对他人有价值的文章,不说传世之作,至少过几年自己还满意。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103438
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!