quantlab_ai版本v0.1代码发布: 从研报中提取因子并建模(附代码与研报集下载)

news2024/12/30 1:28:30

原创内容第676篇,专注量化投资、个人成长与财富自由。

今天我们继续开发AI大模型自动读研报。

从研报到模型,大致分成几步:

["propose_hypo_exp", "propose", "exp_gen", "coding", "running", "feedback"]

首先,我们需要接入大模型API,我们使用openai的SDK来封装。

from openai import OpenAI
import os


class LLM:
    def __init__(self, api_key=os.getenv('KIMI_KEY'), base_url="https://api.moonshot.cn/v1", model='moonshot-v1-128k',system_prompt=None):
        self.client = OpenAI(
            api_key=api_key,
            base_url=base_url,
        )
        if not system_prompt:
            system_prompt = "你是quantlab金融投资专家,由AI量化实验室 " \
                            "提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI " \
                            "为专有名词,不可翻译成其他语言。 "

        self.system_prompt = system_prompt
        self.model = model

    def chat(self, user_prompt):
        completion = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system",
                 "content": self.system_prompt},
                {"role": "user", "content": user_prompt}
            ],
            temperature=0.3,
        )
        return completion.choices[0].message.content

这样一个基础功能就完成了。

我们可以向它提问:

from core.llm import LLM
resp = LLM().chat('你是谁?A股会涨吗?')
print(resp)

输出结果如下:

图片

准备好了16份研报:

图片

比如研报一,

图片

我们的目标是AI自动读研报,然后自主建模复现研报

研报基本都是pdf格式,因此我们需要一个pdf阅读器,langchain里实现了pdf解析,我们直接使用就好了。——langchain生态封装有点多,但工具也挺全的,我们可以使用它的周边。

from pathlib import Path
from langchain_community.document_loaders import PyPDFDirectoryLoader, PyPDFLoader

from langchain_core.documents import Document


def process_documents_by_langchain(docs: list[Document]) -> dict[str, str]:
    content_dict = {}

    for doc in docs:
        if Path(doc.metadata["source"]).exists():
            doc_name = str(Path(doc.metadata["source"]).resolve())
        else:
            doc_name = doc.metadata["source"]
        doc_content = doc.page_content

        if doc_name not in content_dict:
            content_dict[str(doc_name)] = doc_content
        else:
            content_dict[str(doc_name)] += doc_content

    return content_dict


def load_pdfs(path):
    if Path(path).is_dir():
        loader = PyPDFDirectoryLoader(path, silent_errors=True)
    else:
        loader = PyPDFLoader(path)
    docs = process_documents_by_langchain(loader.load())
    return docs

把研报一读取进来:

from loader.pdf_loader import load_pdfs
docs = load_pdfs(DATA_DIR.joinpath('all_reports').joinpath('report1.pdf'))
print(docs)

读进来是文本:

图片

接下来是重点,system prompt,要求LLM从研报中抽取出因子,以及对因子的模型。

extract_factors_system: |-
    用户会提供一篇金融工程研报,其中包括了量化因子和模型研究,请按照要求抽取以下信息:
    1. 概述这篇研报的主要研究思路;
    2. 抽取出所有的因子,并概述因子的计算过程,请注意有些因子可能存在于表格中,请不要遗漏,因子的名称请使用英文,不能包含空格,可用下划线连接,研报中可能不含有因子,若没有请返回空字典;
    3. 抽取研报里面的所有模型,并概述模型的计算过程,可以分步骤描述模型搭建或计算的过程,研报中可能不含有模型,若没有请返回空字典;

    user will treat your factor name as key to store the factor, don't put any interaction message in the content. Just response the output without any interaction and explanation.
    All names should be in English.
    Respond with your analysis in JSON format. The JSON schema should include:
    {
        "summary": "The summary of this report",
        "factors": {
            "Name of factor 1": "Description to factor 1",
            "Name of factor 2": "Description to factor 2"
        },
        "models": {
            "Name of model 1": "Description to model 1",
            "Name of model 2": "Description to model 2"
        }
    }

看下代码运行的结果:

系统按要示的字典格式,把因子和模型都抽取出来了。

图片

{

    "summary": "This report discusses the role of high-frequency factors in quantitative stock selection strategies, with a case study on the enhancement of the CSI 1000 index. The report categorizes high-frequency factors into reversal, momentum, and deep learning types, and tests their stock selection capabilities on a monthly and weekly basis. It also examines the impact of incorporating these factors into the CSI 1000 index enhancement strategy under various constraints.",

    "factors": {

        "Reversal_HighFrequency": "Includes factors like Improved Reversal, EndOfDay_Trading_Volume_Ratio, HighFrequency_Skewness, Downside_Volume_Ratio, Average_Single_Outflow_Amount_Ratio, and LargeOrder_Push_Increase. These factors characterize investor overreaction and tend to select stocks with large previous drops or low turnover rates.",

        "Momentum_HighFrequency": "Includes factors like Opening_Buy_Intention_Ratio, Opening_Buy_Intention_Strength, Opening_LargeOrder_NetBuy_Ratio, and Opening_LargeOrder_NetBuy_Strength. These factors characterize investor buying intentions, capital flow in the order book, or trading behavior of informed investors.",

        "DeepLearning_HighFrequency": "Includes factors like Improved_DeepLearning_Factor and Residual_Attention_DeepLearning_Factor. These factors use past high-frequency features to dynamically fit recent trading patterns and are suitable for short-term windows."

    },

    "models": {

        "CSI_1000_Index_Enhancement": "The model predicts stock returns using a linear weighting approach with base factors including market value, mid-cap (cube of market value), valuation, turnover, reversal, and volatility. High-frequency factors are incrementally introduced to examine changes in portfolio performance. The optimization objective maximizes expected returns under various constraints such as stock deviation, factor exposure, industry deviation, turnover frequency, and turnover rate limits."

    }

}

代码结果如下,已经打包发布至星球:

图片

图片

AI量化实验室 星球,已经运行三年多,1200+会员。

quantlab代码交付至5.X版本,含几十个策略源代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,每周五迭代一次。

(国庆优惠券)

图片

图片

(限时免费,感兴趣可入,关注读书,超级个体,AGI与财富自由)

作者:AI量化实验室(专注量化投资、个人成长与财富自由)

 扩展  •  历史文章   

•  年化从19.1%提升到22.5%,全球大类资产轮动,加上RSRS择时,RSRS性能优化70倍。(附策略源码)

• quantlab5.9代码更新:提供RSRS择时和小市值股票策略(附代码和数据)

•  AI量化实验室——2024量化投资的星辰大海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【玩转 JS 函数式编程_010】3.2 JS 函数式编程筑基之:以函数式编程的方式活用函数(上)

写在前面 按照惯例,过长的篇幅分开介绍,本篇为 JavaScript 函数式编程核心基础的第二部分——以函数式编程的方式活用函数的上篇,分别介绍了 JS 函数在排序、回调、Promise 期约、以及连续传递等应用场景下的用法演示。和之前章节相比难度又有…

“Flash闪存”基础 及 “SD NAND Flash”产品的测试

本篇除了对flash闪存进行简单介绍外,另给读者推荐一种我本人也在用的小容量闪存。 自带坏块管理的SD NAND Flash(贴片式TF卡),尺寸小巧,简单易用,兼容性强,稳定可靠,标准SDIO接口&a…

【C++】map 和 set

目录 一 基础概念 1 关联式容器 2 键值对 3 树形结构的关联式容器 二 map 1 概念 2 基础操作 3 使用实列 1 实例一 2 实例二 3 实例三 4 实例四 4 multimap 1 实例一 三 set 1 概念 2 基础操作 3 使用实例 1 实例一 2 实例二 3 实例三 4 multiset 1 实…

SpringBoot使用esayExcel根据模板导出excel

1、依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency> 2、模板 3、实体类 package com.skybird.iot.addons.productionManagement.qualityTesting…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

字符编码发展史6 — BOM字节序标记

上一篇《字符编码发展史5 — UTF-16和UTF-32》我们讲解了UTF-16和UTF-32编码。本篇我们将继续讲解字符编码中的字节序标记(BOM)。 2.3. 第三个阶段 国际化 2.3.2. Unicode的编码方式 2.3.2.5. BOM 1. 什么是BOM&#xff1f; BOM是Byte Order Mark的缩写&#xff0c;翻译成…

研究生异地报名,需要社保缴费记录,没有社保记录怎么办。

1、户籍在安徽省&#xff0c;在北京工作&#xff0c;想报北京科技大学&#xff1b; 招生简章中没有提社保记录&#xff0c;但是在报名的时候&#xff0c;又出来要求&#xff1a;北京连续6个月的社保记录。这里是指在北京市考试的要求。没有连续社保缴费记录&#xff0c;肯定不能…

Python 与 Pycharm 的简易安装教程,包含Pycharm的修改

一. 官方网站 Python网址&#xff1a;python唯一的官方网址。 Pycharm网址&#xff1a;Pycharm的官方网址。 二. python安装步骤 滑动到红色框内 Downloads 导航栏。 红色框是选择适合自己电脑系统和版本的部分&#xff0c;蓝色框是选择系统的部分&#xff0c;黄色框是版本号。…

【大数据】数据分析之Spark框架介绍

文章目录 概述一、发展历程与背景二、核心特点三、生态系统与组件四、应用场景五、与其他大数据技术的比较 核心概念1. 弹性分布式数据集&#xff08;RDD, Resilient Distributed Dataset&#xff09;2. 转换&#xff08;Transformations&#xff09;和动作&#xff08;Actions…

Rust编程的函数

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 7.1 函 数 定 义 在Rust中&#xff0c;函数使用fn关键字定义&#xff0c;后跟函数…

how to increase the height of the ps or cdm window

when the line reaches the bottom; directly pull up the top bar of the window after pulling down the bar

【Linux】ComfyUI和SD WebUI之PYTHON环境共享,模型共享,LORA等公共资源共享

需求 一般玩AI绘图都会装ComfyUI和SD WebUI。而且这俩的模型、lora等都是一致的。为了避免空间的浪费&#xff0c;一般会采用共享数据的方式。而且共享的数据可以任意指定分区&#xff0c;这让挂载NAS共享空间成为可能&#xff0c;实现多绘画机ComfyUI和SD WebUI共享资源。 实…

攀爬数据集,约500张 !VOC格式,yolo可直接使用~真实场景特征明显高清图,yolo可直接使用!

攀爬数据集&#xff0c;约500张&#xff01;&#xff01;&#xff01; VOC格式&#xff0c;yolo可直接使用&#xff5e; 真实场景特征明显高清图&#xff0c;yolo可直接使用&#xff01; 攀爬数据集&#xff0c;约500张&#xff01;&#xff01;&#xff01; VOC格式&#xff0…

用GPT-4o打造LLM+OS(10+实用技能),代码开源,指令曝光,科技演示惊艳全场!

目录 前言 LLM操作系统能力概况&#xff08;phidata中前5个已经实现&#xff09;&#xff1a; 可以读取/生成文本 拥有比任何单个人类更全面的知识 可以浏览互联网 可以使用现有的软件基础设施&#xff08;计算器、Python、鼠标/键盘&#xff09; 可以与其他LLMs通信 可…

一文了解,ARM 工业计算机的发展历程

ARM 工业计算机的发展历程主要经历了以下几个阶段&#xff1a; 早期探索阶段&#xff08;20 世纪 80 年代 - 90 年代初&#xff09;&#xff1a; 起源背景&#xff1a;20 世纪 80 年代&#xff0c;计算机工业蓬勃发展&#xff0c;英国的 Acorn 公司在这一时期积极探索芯片技术…

Unity实现自定义图集(四)

以下内容是根据Unity 2020.1.0f1版本进行编写的   在之前的篇章中已经把自定义图集在编辑器上的使用,以及运行时所需的信息都准备好了,接下来就是魔改UGUI的Image组件,使其能够像Image那样运行时如果引用的资源有打自定义图集,则加载对应自定义图集的Texture。 1、思路 …

Centos7通过jengkins实现自动发布和回滚

一、安装jenkins 注&#xff1a;这里不多说哈&#xff0c;百度遍地都是&#xff0c;安装方式不限。 二、jenkins创建项目 注&#xff1a;这里有个坑需要说一下&#xff0c;最开始我使用的是maven构建&#xff0c;但是如果按照我的这套方案会有一个编译死循环的问题&#xff0c;…

【Linux】多进程服务器模型(第十九篇)

目录 一、定义与工作原理 二、特点与优势 三、实现与示例 四、注意事项 多进程服务器模型是一种在服务器端使用的并发处理模型&#xff0c;它允许服务器同时处理多个客户端的请求。以下是关于多进程服务器模型的详细介绍&#xff1a; 一、定义与工作原理 定义&#xff1a;…

抽象类Abstart Class

抽象类其实就是一种不完全的设计图 必须用abstract修饰 模板方法&#xff1a;建议使用final修饰&#xff0c;不能被重写。

提高ROI:低代码平台如何助力企业实现成本效益最大化

引言&#xff1a;成本效益与ROI的重要性 在当今竞争异常激烈的商业环境中&#xff0c;企业面临着前所未有的挑战。如何在有限的资源下&#xff0c;最大化投资回报率&#xff08;ROI&#xff09;&#xff0c;已经成为企业管理者不可忽视的关键课题。ROI不仅仅是衡量投资回报的指…