原创内容第635篇,专注量化投资、个人成长与财富自由
一周一度的星球更新代码的日子:
本周代码更新核心点:
1、因子表达式引擎里把函数集基本补齐,提供给deap遗传算法因子挖掘,包括TA-lib的函数,如阿隆指标,CCI等。
2、Deap支持单序列回测(按分位点),主要用于CTA时序因子挖掘。
3、新增大模型生成因子Factor-GPT,生成的因子符合world quant101的格式,且使用的是咱们因子表达式的函数集,可以直接调用。
4、修复一些已知问题。
5、补充分钟级期货数据。
后续星球的工作重点:
基于Deap因子挖掘框架的成熟,可以挖掘多序列截面因子和单序列的时序因子。补充指数、ETF量价数据集,股票价量数据集,股票基本面数据集。
然后进行因子挖掘和筛选,同时进行因子合成与策略生成。
不排除引入一些技术分析指标,信号来辅助优化策略。
另外,因子表达式的计算效率通过numba来优化。
Numba 是一个 Python 的 JIT(Just-In-Time)编译器,它可以将 Python 代码编译成机器代码,从而提高代码的执行速度。它特别适合于科学计算和数值密集型任务,特别是当使用 NumPy 数组进行大量计算时。
使用 Numba 进行性能优化的技巧和注意事项:
-
使用
@jit
装饰器:将@jit
装饰器添加到 Python 函数上,可以加速该函数的执行。使用nopython=True
参数可以指示 Numba 生成不依赖 Python 解释器的代码,从而获得更好的性能。 -
Numba 与 NumPy 的结合使用:Numba 能够理解 NumPy 数组类型,并且可以生成在 GPU 或多核 CPU 上执行的高效代码。当处理面向数组的计算任务时,Numba 可以提供数据并行性。
AlphaGPT的代码如下:
from langchain_community.adapters.openai import convert_openai_messages def read_file_2_list(filepath): with open(filepath, 'r', encoding='utf-8', errors='ignore') as f: text = f.readlines() return text sample_json = """ { "expr": 生成的因子表达式, } """ # "desc": 对该因子表达式的解释说明 from langchain_openai import ChatOpenAI import json as json KIMI_KEY = None if not KIMI_KEY: import os KIMI_KEY = os.getenv('KIMI_KEY') class FactorGPTAgent: def __init__(self): self.sources = [x.strip() for x in read_file_2_list('worldquant_101.txt')] optional_params = { "response_format": {"type": "json_object"} } self.func_names = [] from datafeed.expr_functions import unary_rolling_funcs for func in unary_rolling_funcs: self.func_names.append(func) from datafeed.expr_functions import unary_funcs for func in unary_funcs: self.func_names.append(func) from datafeed.expr_functions import binary_roilling_funcs for func in binary_roilling_funcs: self.func_names.append(func) # openai_api_key = KIMI_KEY self.model = ChatOpenAI(temperature=0, openai_api_key=KIMI_KEY, model='moonshot-v1-8k', base_url="https://api.moonshot.cn/v1", max_retries=1, model_kwargs=optional_params) def build_prompt(self): prompt = [{ "role": "system", "content": "你是一个量化分析师. 你可以通过阅读多个alpha因子表达式,总结其内在规律,并且可以创新性的生成可用的因子表达式。" "对于生成的表达式,你能够解释其有效性,并且能够用清晰简洁的语言解释其各个变量的含义。\n " }, { "role": "user", "content": f"指令描述: 生成因子表达式" f"可以使用的变量名:open,high,low,close,volume\n" f"可以使用的函数名列表: {self.func_names}\n " f"你的任务学习以上资源之后,总结其规律,输出一个同类型表达式。\n " f"参考{self.sources}的因子形式,书写表达式时,每次生成10个,,生成的表达式,不要带Alpha#xxx,期望因子的相关性低\n" f"Please return nothing but a JSON in the following format:\n" f"{sample_json}\n " }] return prompt def run(self): lc_messages = convert_openai_messages(self.build_prompt()) response = self.model.invoke( lc_messages).content print(response) return json.loads(response) if __name__ == '__main__': FactorGPTAgent().run()
9月开学季,送你一张优惠券:
历史文章: