使用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

将机器学习应用于金融投资中 | Qlib从入门到精通 #6

Qlib评估与结果分析模块 | Qlib从入门到精通 #5

一个典型机器学习量化策略的实现 | Qlib从入门到精通 #4

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值