机器学习量化前的准备——全球指数数据篇

持续行动1期 57/100,“AI技术应用于量化投资研究”。

上一周,我们把backtrader快速介绍了一下,基础功能和一些有用的扩展。可以这么说,传统量化使用backtrader就够了,而前沿的机器学习量化qlib更合适。但qlib的回测功能偏弱。

之前在lightGBM+158个技术因子实证A股十年数据:年化24%,回撤10%,我们介绍了多因子模型,然后lightGBM有效因子筛选与qlib自定义handler把158个因子“精简”为15个,依然取得不错的超额收益。

但上述的模型在实盘中仍然不好操作,原因是它经常交易50支以上的股票,而且由于计算量大,单机训练已经很吃力了。

今天我们要把沪深300的股票池换成全球指数,A股,港股,美股等以及A股里重要的行业指数,像消费、科技、医药、证券等等。

01 数据准备

如所有机器学习项目一样,数据准备都是一项耗费精力的事情。

好在我们把数据聚焦在OHLCV上,而且专注在指数上,那么数据量就少很多,使用csv就可以轻松管理——很多时候,工程复杂性是随数据量级攀升的

tushare上的指数有8000多支,还未必全。像基金一样,指数是股票的各种排列组合,数量比股票多得多。

我们选几支核心指数就够了,取A股指数日线:

def get_index_daily(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"
    ])
    df.rename(columns={'vol': 'volume', 'ts_code': 'code', 'trade_date': 'date'}, inplace=True)
    df['_id'] = df['code'] + '_' + df['date']
    return df

取国际主要指数日线:

def get_global_index_daily(code):
    # 拉取数据
    df = pro.index_global(**{
        "ts_code": code,
        "trade_date": "",
        "start_date": "",
        "end_date": "",
        "limit": "",
        "offset": ""
    }, fields=[
        "ts_code",
        "trade_date",
        "open",
        "close",
        "high",
        "low",
        # "pre_close",
        # "change",
        # "pct_chg",
        "swing",
        "vol"
    ])
    df.rename(columns={'vol': 'volume', 'ts_code': 'code', 'trade_date': 'date'}, inplace=True)
    df['_id'] = df['code'] + '_' + df['date']
    return df

恒生指数:

国际指数6支(都是我们可以在A股市场买到的):

global_index = {
    'HSI': '恒生指数',
    'HKTECH': '恒生科技指数',
    'SPX': '标普500指数',
    'IXIC': '纳斯达克指数',
    
    'GDAXI': '德国DAX指数',
    'N225':'日经225指数'
}

A股宽基、策略及行业指数:

index = {
    '000300.SH': '沪深300',
    '000905.SH': '中证500',
    '399006.SZ': '创业板指数',
    '399324.SZ': '深证红利',
    '000922.SH': '中证红利',
    '399396.SZ': '食品饮料',
    '399967.SZ': '中证军工',
    '399997.SZ': '中证白酒',
    '399998.SZ': '中证煤炭',
    '000827.SH': '中证环保',
    '399989.SZ': '中证医疗',
    '399986.SZ': '中证银行',
    '399971.SZ': '中证传媒',
    '000993.SH': '全指信息',
}

全部保存成csv文件即可。

02 csv dump成qlib格式

from common.scripts.dump_bin import DumpDataAll, DumpDataUpdate
from core.config import DATA_DIR_QLIB_INDEX, DATA_DIR_CSV_INDEX

# 要写在main里,因为使用了多进程
if __name__ == '__main__':
    dump = DumpDataAll(csv_path=DATA_DIR_CSV_INDEX, qlib_dir=DATA_DIR_QLIB_INDEX, exclude_fields=['code'])
    dump.dump()

03 使用158因子集进行训练与回测

一共花了24s的时间加载并处理数据,若是沪深300,需要几分钟。

然后训练过程与之前的文章相同,目前看效果不理想。是因子的问题,还是模型参数的问题,这就是我们要解决的核心关键。

04 lightGBM回归

结果如预期不好。

下一步的就是机器学习应用于量化的重中之重,如何找到有效的特征,如何调优查模型等

公众号:ailabx(七年实现财富自由)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AI量化投资实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值