使用A股指数进行机器学习模型回测 | Qlib从入门到精通 #7

下前面说了,学习投资从指数开始。

指数的数据比较全,不受操控。

我们优先关注几个重点的指数,宽基指数和重要行业指数,把它们的数据导入到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

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104236
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注