• 基于qlib自定义的A股股票池:计算均线,动量,MACD等以及可视化


    百天计划之第25天,关于“智能量化,财富自由与个人成长”。

    8月的重点工作是讲清楚qlib智能量化框架的使用,不只是tutorail这样的试用教程,而是真正用于生产环境。

    文档和示例有很多未尽事宜,而且框架本身还没有到1.0,还有持续迭代开发中,所以很多具体的用法,需要到代码中去理解。


    好在qlib的代码质量还是非常高的,写得非常清晰,读qlib的代码,对于python编程能力也有帮助。

    今天重点说说:

    基于自定义的A股股票池,自定义指标:均线,动量,MACD等,然后可视化出来。

    01 从tushare到mongo

    昨天的文章,我们把茅台(600519.sh)的日线数据以及财务指标入库mongo并导入到qlib的库中。今天我们扩展成10支股票(一次到位可以,需要一些时间,作为示例,10支与4000支区别不大)。

    选择我自己持有的一支基金——富国天惠(161005)的前十大重仓股:

    tips: mongo默认是按照_id字段去重的,而且会把_id相同的直接忽略掉,其余可以正常写入,这一点非常方便。

    从tushare批量建数据,还涉及到每天盘后更新。

    所以呢,一般会把_id设置成唯一key,这样不用担心数据重复入库。

    每次入库前,会判断已经入库的日期,然后以此日期为起点,从tushare读取增量数据,其余逻辑都是一致的。

    02 从mongo到qlib

    逻辑类似,都有一个一次性建立以及增量更新的问题。

    与mongo入库类似,我们通过查询qlib数据中已经存在的最近的日期,以此为起点去mongo读增量数据。

    03 读取时间序列并绘图

    茅台的收盘价(后复权)

    MACD_EXP = '(EMA($close, 12) - EMA($close, 26))/$close - EMA((EMA($close, 12) - EMA($close, 26))/$close, 9)/$close'
    fields = [MACD_EXP, '$close']  # MACD
    data_loader_config = {
        "feature": (fields, ['MACD', '收盘价']),
        # "label": (labels, label_names)
    }
    data_loader = QlibDataLoader(config=data_loader_config)
    df = data_loader.load(instruments=['600519.SH'])
    df = df['feature']
    
    print(df)
    df['收盘价'].plot()

    茅台现在"后复权"收盘价达到14700+!

    茅台历史上的MACD值序列如下:

    qlib数据库的好处就是在原始序列的基础上,计算指标会很方便,而且内置了多进程,缓存系统等功能,能省我们不少数据处理相关的事情。

    04 自定义表达式

    内置的表达式主要是一些基础的计算函数,我们可以组合出基础的计算功能,而且我们自己自己实现表达式,并注册给系统即可。

    class Distance(PairOperator):
        def _load_internal(self, instrument, start_index, end_index, freq):
            series_left = self.feature_left.load(instrument, start_index, end_index, freq)
            series_right = self.feature_right.load(instrument, start_index, end_index, freq)
            return np.abs(series_left - series_right)

    如上是对两个序列,计算“距离”。

    对表达式进行注册:

    kwargs = {"custom_ops": [Distance]}
    qlib.init(provider_uri=str(path.resolve()),**kwargs)

    注册后就可以如内置的表达式一样正常使用:

    fields = [MACD_EXP, '$close', 'Distance($close,$open)']

    5日均线:

    计算5日动量:

    '$close/Ref($close,5)-1'

    近期文章:

    从tushare建立自己的A股 qlib数据库

    qlib高阶应用之财务数据库与自定义表达式

    qlib熟练使用后如何进阶?tests和examples

  • 相关阅读:
    字节一面:说说TCP的三次握手
    网络游戏协议:基于Protobuf的序列化与反序列化
    服务器被黑该如何查找入侵痕迹以及如何防御攻击
    【Visual Studio Code----Shader编程环境配置】
    Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
    中科磐云—2022广西逆向解析思路
    自己封装 vue3+ts 组件库并且发布到 NPM
    蓝桥杯DP算法——背包问题(C++)
    【Java】垃圾回收
    GEE学习笔记003-访问asset文件
  • 原文地址:https://blog.csdn.net/weixin_38175458/article/details/126526809