前面说了,学习投资从指数开始。
指数的数据比较全,不受操控。
我们优先关注几个重点的指数,宽基指数和重要行业指数,把它们的数据导入到qlib的存储中。
我们重点关注几个指数:
class Config:
def get_index_codes(self):
return [
'000300.SH',#沪深300
'000905.SH',#中证500
'399006.SZ', #创业板
'000852.SH', #中证1000
'399324.SZ', #深证红利
'000922.SH', #中证红利
'399997.SZ', #中证白酒
'399396.SZ', #食品饮料
'000013.SH',#上证企债
'000016.SH' #上证50
]
def get_global_index_codes(self):
return [
'HSI',#恒生指数
'SPX',#标普500
'GDAXI',#德国DAX
'N225' #日经225
]
使用tushare的代码生成器,直接可以生成如下函数,下载的数据就是dataframe。
def collect_index(code):
# 拉取数据
df = pro.index_daily(**{
"ts_code": code,
"trade_date": "",
"start_date": "",
"end_date": "",
"limit": "",
"offset": ""
}, fields=[
"ts_code",
"trade_date",
"close",
"open",
"high",
"low",
"pre_close",
"change",
"pct_chg",
"vol",
"amount"
])
return df
使用qlib的dump_bin导入,这里我们说一种,直接调用类,而不是官方方档里调脚本的方式,而且我已经内置到软件中了。
选择目录,然后引入 dump_bin里的DumpDataAll函数,配置相应的参数。
dlg = wx.DirDialog(self, u"选择要导入csv的文件目录", style=wx.DD_DEFAULT_STYLE)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath() # 文件夹路径
from data.dump_bin import DumpDataAll
DumpDataAll(csv_path=path, qlib_dir='~/.qlib/qlib_data/index_data',
symbol_field_name='ts_code',
include_fields=['open', 'high','low','close', 'vol', 'amount'],
date_field_name='trade_date').dump()
wx.MessageBox('导入完成!', '成功!')
几个核心指数的数据就完成存储了。

重新规划一下主窗口,分成左右两个部分,
这里需要使用一个组件是wx.SplitterWindow,只能在frame里用,而不能在panel中,这个需要特别注意。
def init_main_win(self):
splitter = wx.SplitterWindow(self, -1)
self.leftpanel = wx.Panel(splitter)
self.rightpanel = wx.Panel(splitter)
splitter.SplitVertically(self.leftpanel, self.rightpanel, 100)
splitter.SetMinimumPaneSize(200)
self.init_left_panel()
self.init_right_panel()
左侧的panel里引入树结构,显示指数列表:
def init_left_panel(self):
self.boxH = wx.BoxSizer(wx.VERTICAL)
self.leftpanel.SetSizer(self.boxH)
from .widgets import AiTreeListCtrl
tree = AiTreeListCtrl(self.leftpanel, cols=['名称', '描述'],root_text='指数列表')
self.boxH.Add(tree,1,flag=wx.ALL|wx.EXPAND)
生成的界面如下:

准备好了数据,开始我们的量化回测。
使用qib内置的alpha360,即360个因子————对,机器学习与传统量化几条规则不一样,
上来就是几百个因子,计算特征在我的笔记本上足足5分钟。
当然qlib做了很多并行计算,以及中间过程的缓存。
如何发现有效的alpha,配置最有效的因子,这才是关键。
训练的模型是lightGBM。
def _get_model_config(self):
model = {
"class": "LGBModel",
"module_path": "qlib.contrib.model.gbdt",
"kwargs": {
"loss": "mse",
"colsample_bytree": 0.8879,
"learning_rate": 0.0421,
"subsample": 0.8789,
"lambda_l1": 205.6999,
"lambda_l2": 580.9768,
"max_depth": 8,
"num_leaves": 210,
"num_threads": 20,
}
}
return model
1041

被折叠的 条评论
为什么被折叠?



