这是用户在 2024-10-28 10:19 为 http://101.43.125.111:8501/factor 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
Drag and drop files hereLimit 200MB per file • PDF, PNG, JPG, JPEG
  • 20240603_中金公司_古翔_上市公司质量评估新视角.pdf
    1.6MB

华泰金工-GPT复现因子研报

🌊 “善学者, 其如海乎” ————《随园诗话·补遗 卷四》

Hi!我是华泰金工团队创造的GPT如海,能够复现量化研报中的人工智能策略。

请上传你的相关文件,让我们开始代码复现之旅吧!

构建知识库...

知识库构建完成!

提取因子描述完成!

在量化投资领域,因子的构建通常涉及对财务数据的处理和分析。以下是从提供的信息中提取的因子构建步骤和公式:

  1. 投资现金流相关因子:

    • TTM投资现金流的环比增长率: cf_p_qoq=TTM投资现金流tTTM投资现金流t1TTM投资现金流t1\text{cf\_p\_qoq} = \frac{\text{TTM投资现金流}_{t} - \text{TTM投资现金流}_{t-1}}{\text{TTM投资现金流}_{t-1}}
    • 过去8个季度TTM投资现金流标准差与均值的比值: cf_p_std=std(TTM投资现金流t8:t)mean(TTM投资现金流t8:t)\text{cf\_p\_std} = \frac{\text{std}(\text{TTM投资现金流}_{t-8:t})}{\text{mean}(\text{TTM投资现金流}_{t-8:t})}
    • TTM投资现金流环比增长率的标准差: cf_p_qoq_std=cf_p_qoqstd(cf_p_qoqt8:t)\text{cf\_p\_qoq\_std} = \frac{\text{cf\_p\_qoq}}{\text{std}(\text{cf\_p\_qoq}_{t-8:t})}
  2. 自由现金流相关因子:

    • 简化自由现金流的环比增长率: fcff1_qoq=经营性现金流量净额t购建固定无形和长期资产支付的现金t经营性现金流量净额t1购建固定无形和长期资产支付的现金t1\text{fcff1\_qoq} = \frac{\text{经营性现金流量净额}_{t} - \text{购建固定无形和长期资产支付的现金}_{t}}{\text{经营性现金流量净额}_{t-1} - \text{购建固定无形和长期资产支付的现金}_{t-1}}
    • 简化自由现金流的标准差与均值的比值: fcff1_std=std(fcff1t8:t)mean(fcff1t8:t)\text{fcff1\_std} = \frac{\text{std}(\text{fcff1}_{t-8:t})}{\text{mean}(\text{fcff1}_{t-8:t})}
    • 简化自由现金流环比增长率的标准差: fcff1_qoq_std=fcff1_qoqstd(fcff1_qoqt8:t)\text{fcff1\_qoq\_std} = \frac{\text{fcff1\_qoq}}{\text{std}(\text{fcff1\_qoq}_{t-8:t})}
  3. 税务支出相关因子:

    • 税金及附加环比增长率: ot_qoq=税金及附加t税金及附加t1税金及附加t1\text{ot\_qoq} = \frac{\text{税金及附加}_{t} - \text{税金及附加}_{t-1}}{\text{税金及附加}_{t-1}}
    • 过去8个季度税金及附加标准差与均值的比值: ot_std=std(税金及附加t8:t)mean(税金及附加t8:t)\text{ot\_std} = \frac{\text{std}(\text{税金及附加}_{t-8:t})}{\text{mean}(\text{税金及附加}_{t-8:t})}
    • 税金及附加环比增长率的标准差: ot_qoq_std=ot_qoqstd(ot_qoqt8:t)\text{ot\_qoq\_std} = \frac{\text{ot\_qoq}}{\text{std}(\text{ot\_qoq}_{t-8:t})}

这些公式通过对财务数据的增长率、稳定性等维度进行分析,帮助构建出能够反映公司财务健康状况和潜在投资价值的因子。

Sources:

  • 20240603_中金公司_古翔_上市公司质量评估新视角.pdf

因子1代码已完成:

# -*- coding: utf-8 -*- import pandas as pd import numpy as np import os class Factor: """ 定义量价因子类 """ def __init__(self, data_path: str, directory: str): """ 初始化量价因子类,读取数据。 param data_path: 数据路径,数据格式为pkl文件,读取后为pandas.DataFrame格式。 param directory: 量价因子存储文件夹路径。 """ # 因子名称(使用英文命名, 不要使用中文命名, 单词间使用_连接, 便于保存储存) self.factor_name = "investment_cash_flow_factors" # 读取数据(数据格式为pkl文件) self.cash_flow = pd.read_pickle(data_path + "cash_flow.pkl") # 因子存储文件夹路径 self.directory = directory os.makedirs(self.directory, exist_ok=True) def _preprocess(self): """ 预处理数据,对数据进行清洗、过滤等操作。 return : """ # 去除缺失值 self.cash_flow = self.cash_flow.dropna() def _generate(self): """ 生成因子 return : """ # 计算TTM投资现金流的环比增长率 self.cf_p_qoq = (self.cash_flow - self.cash_flow.shift(1)) / self.cash_flow.shift(1) # 计算过去8个季度TTM投资现金流标准差与均值的比值 self.cf_p_std = self.cash_flow.rolling(window=8).std() / self.cash_flow.rolling(window=8).mean() # 计算TTM投资现金流环比增长率的标准差 self.cf_p_qoq_std = self.cf_p_qoq / self.cf_p_qoq.rolling(window=8).std() # 将生成的因子合并为一个DataFrame self.factor = pd.DataFrame({ 'cf_p_qoq': self.cf_p_qoq, 'cf_p_std': self.cf_p_std, 'cf_p_qoq_std': self.cf_p_qoq_std }) def _postprocess(self): """ 后处理因子,保存因子。 param data: 数据,pandas.DataFrame格式。 return: 无。 """ # 将量价因子的结果保存为对应的pkl文件 pd.to_pickle(self.factor, os.path.join(self.directory, f"{self.factor_name}.pkl")) def run(self): """ 运行入口代码,生成因子并保存。 return: 无。 """ self._preprocess() self._generate() self._postprocess() if __name__ == "__main__": # 随机生成投资现金流数据(行为日期, 列为股票代码) np.random.seed(0) os.makedirs("data/", exist_ok=True) # 示例: 生成日期与股票代码 dates = pd.date_range(start='2020-01-01', periods=100) stocks = [f"stock_{i}" for i in range(10)] # 示例: 生成投资现金流数据 data = np.random.randn(100, 10) data = pd.DataFrame(data, index=dates, columns=stocks) data.to_pickle("data/cash_flow.pkl") # 计算因子 factor = Factor(data_path="data/", directory="factor/") factor.run()

因子1代码下载: Download

因子2代码已完成:

# -*- coding: utf-8 -*- import pandas as pd import numpy as np import os class Factor: """ 定义量价因子类 """ def __init__(self, data_path: str, directory: str): """ 初始化量价因子类,读取数据。 param data_path: 数据路径,数据格式为pkl文件,读取后为pandas.DataFrame格式。 param directory: 量价因子存储文件夹路径。 """ # 因子名称(使用英文命名, 不要使用中文命名, 单词间使用_连接, 便于保存储存) self.factor_name = "fcff1_factors" # 读取数据(数据格式为pkl文件) self.operating_cash_flow = pd.read_pickle(data_path + "operating_cash_flow.pkl") self.capital_expenditure = pd.read_pickle(data_path + "capital_expenditure.pkl") # 因子存储文件夹路径 self.directory = directory os.makedirs(self.directory, exist_ok=True) def _preprocess(self): """ 预处理数据,对数据进行清洗、过滤等操作。 return : """ # 去除缺失值 self.operating_cash_flow = self.operating_cash_flow.dropna() self.capital_expenditure = self.capital_expenditure.dropna() def _generate(self): """ 生成因子(在注释中详细写明因子的生成逻辑) return : """ # 计算简化自由现金流 fcff1 = self.operating_cash_flow - self.capital_expenditure # 计算简化自由现金流的环比增长率 fcff1_qoq = fcff1 / fcff1.shift(1) # 计算简化自由现金流的标准差与均值的比值 fcff1_std = fcff1.rolling(window=8).std() / fcff1.rolling(window=8).mean() # 计算简化自由现金流环比增长率的标准差 fcff1_qoq_std = fcff1_qoq / fcff1_qoq.rolling(window=8).std() # 将计算的因子存储在一个字典中 self.factor = { "fcff1_qoq": fcff1_qoq, "fcff1_std": fcff1_std, "fcff1_qoq_std": fcff1_qoq_std } def _postprocess(self): """ 后处理因子,保存因子。 param data: 数据,pandas.DataFrame格式。 return: 无。 """ # 将量价因子的结果保存为对应的pkl文件 for key, value in self.factor.items(): pd.to_pickle(value, os.path.join(self.directory, f"{key}.pkl")) def run(self): """ 运行入口代码,生成因子并保存。 return: 无。 """ self._preprocess() self._generate() self._postprocess() if __name__ == "__main__": # 随机生成股票数据(行为日期, 列为股票代码) np.random.seed(0) os.makedirs("data/", exist_ok=True) # 示例: 生成日期与股票代码 dates = pd.date_range(start='2020-01-01', periods=100) stocks = [f"stock_{i}" for i in range(10)] # 示例: 生成经营性现金流量净额数据 operating_cash_flow_data = np.random.randn(100, 10) operating_cash_flow_data = pd.DataFrame(operating_cash_flow_data, index=dates, columns=stocks) operating_cash_flow_data.to_pickle("data/operating_cash_flow.pkl") # 示例: 生成购建固定无形和长期资产支付的现金数据 capital_expenditure_data = np.random.randn(100, 10) capital_expenditure_data = pd.DataFrame(capital_expenditure_data, index=dates, columns=stocks) capital_expenditure_data.to_pickle("data/capital_expenditure.pkl") # 计算因子 factor = Factor(data_path="data/", directory="factor/") factor.run()

因子2代码下载: Download

因子3代码已完成:

# -*- coding: utf-8 -*- import pandas as pd import numpy as np import os class Factor: """ 定义税务支出相关因子类 """ def __init__(self, data_path: str, directory: str): """ 初始化税务支出相关因子类,读取数据。 param data_path: 数据路径,数据格式为pkl文件,读取后为pandas.DataFrame格式。 param directory: 因子存储文件夹路径。 """ # 因子名称(使用英文命名, 不要使用中文命名, 单词间使用_连接, 便于保存储存) self.factor_name = "tax_related_factor" # 读取数据(数据格式为pkl文件) self.tax_data = pd.read_pickle(data_path + "tax_data.pkl") # 因子存储文件夹路径 self.directory = directory os.makedirs(self.directory, exist_ok=True) def _preprocess(self): """ 预处理数据,对数据进行清洗、过滤等操作。 return : """ # 去除缺失值 self.tax_data = self.tax_data.dropna() def _generate(self): """ 生成因子 return : """ # 计算税金及附加环比增长率 self.tax_data['ot_qoq'] = self.tax_data.pct_change() # 计算过去8个季度税金及附加标准差与均值的比值 self.tax_data['ot_std'] = self.tax_data.rolling(window=8).std() / self.tax_data.rolling(window=8).mean() # 计算税金及附加环比增长率的标准差 self.tax_data['ot_qoq_std'] = self.tax_data['ot_qoq'] / self.tax_data['ot_qoq'].rolling(window=8).std() # 将生成的因子存储到类属性中 self.factor = self.tax_data def _postprocess(self): """ 后处理因子,保存因子。 param data: 数据,pandas.DataFrame格式。 return: 无。 """ # 将量价因子的结果保存为对应的pkl文件 pd.to_pickle(self.factor, os.path.join(self.directory, f"{self.factor_name}.pkl")) def run(self): """ 运行入口代码,生成因子并保存。 return: 无。 """ self._preprocess() self._generate() self._postprocess() if __name__ == "__main__": # 随机生成税金及附加数据(行为日期, 列为公司代码) np.random.seed(0) os.makedirs("data/", exist_ok=True) # 示例: 生成日期与公司代码 dates = pd.date_range(start='2020-01-01', periods=100) companies = [f"company_{i}" for i in range(10)] # 示例: 生成税金及附加数据 data = np.random.randn(100, 10) data = pd.DataFrame(data, index=dates, columns=companies) data.to_pickle("data/tax_data.pkl") # 计算因子 factor = Factor(data_path="data/", directory="factor/") factor.run()

因子3代码下载: Download