BigQuant使用文档

因子平台/BigAlpha

由jliang创建,最终由qxiao 被浏览 2663 用户

因子研究

在金融投资领域中,因子研究是量化投资的重要组成部分。这是一种研究和分析股票、债券等金融资产的性能和风险的关键手段,以揭示影响投资回报的基本因素。

因子研究的核心价值在于,它可以揭示那些对投资回报产生持续影响的变量,如市值、质量、动量、低波动性、收益率等。这些因子在历史上已经显示出对投资回报的显著影响,因此,对这些因子的深入理解和应用,对于量化投资策略的建立至关重要。

通过量化方法,如统计和数学模型,因子研究可以帮助投资者更好地理解资产的性能和风险,从而优化投资组合,实现风险和回报的平衡。因子研究的结果还可以帮助投资者一定程度上预测未来的市场趋势,从而做出更加科学和理性的投资决策。

此外,因子研究还可以帮助投资者实现多因子投资策略。通过研究和分析多个因子对投资回报的影响,投资者可以在不同的因子之间构建投资组合,以实现更好的风险调整后的回报。

总的来说,因子研究在量化投资中的重要性不言而喻。通过对影响投资回报的各种因子进行深入研究,投资者可以更好地理解市场,制定有效的投资策略,并最终实现投资目标。因此,无论您是初学者还是经验丰富的投资者,因子研究都应该是您量化投资工具箱的重要组成部分。

\

平台快速入门

查看因子

  • 排序
  • 筛选

查看因子详情

使用因子

  • 在策略中使用因子
  • 读取因子数据

因子订阅

深入使用指南

API提交因子分析

在aistudio开发环境,使用下列代码将因子提交到因子库:

bigquant支持研究员按自己的因子分析框架进行分析、输出、展示,相应的数据、图表通过factors.submit_factor接口提交到前端页面展示。示例因子分析模版可参考:

https://bigquant.com/wiki/doc/5zug5a2q5yig5p6q5luj56cb-Od7rjBTNDQ

\

datasource_id = "cn_stock_factors_test"
datasource_column = "volume"

import dai
import bigcharts
from bigalpha import factors
import uuid

factors.submit_factor(
    id = "test_factor_0001",
    performance_index = {"sharpe": 0.25, "xxx": 1.24},
    performance_report = "abcd",
    metadata = {},
    docs = {},
    name = "因子提交示例",
    desc = "这是一个简单的测试因子",
    datasource_id = "cn_stock_factors_test",
    datasource_column = "volume",
    space_id = "",
)

我的因子

在开发环境通过factors.submit_factor接口提交的因子可以在”我的因子”进行查看。

{w:90}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}


可选择一个或多个因子进行提交,研究员可将因子提交到我的因子库或团队因子库中

\

创建因子库

  • 在"我的因子库“的右侧,有三个点的按钮,点击可新建因子库:

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

  • 新建因子库,需要输入因子库名和因子库描述:

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

因子库管理

因子库右侧有三个点的按钮,点击可进行编辑因子库、成员管理、删除因子库的操作。

编辑因子库

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

成员管理

点击”添加成员“按钮,可将平台上其他研究员加入到该因子库。

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}


加入以后,被添加的成员在平台上的”团队因子库“页面,可以看到有权限的因子库列表。

{w:90}{w:100}{w:100}

\

删除因子库

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

因子库上架

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}


点击 ”上架“按钮,即可上架到指定的目录

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

因子看板

上架以后,可在相应的目录查看上架的因子库。

{w:80}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}


点击因子库名称,可详细查看该库提交的因子

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

点击因子名,可详细查看该因子的因子分析详情。注:因子分析的逻辑、展示输出完全由研究员自己代码决定。

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}


{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

\

因子库审核

点击左侧”因子库审核“按钮可进行审核,点击”审核“按钮可将申请上架的因子库发布出去,供平台其他人追踪。点击”下架“按钮,可将上架的因子库下架。

{w:100}{w:100}{w:100}{w:100}{w:100}

\

以布林带为例的因子分析实践

因子分析原理:

因子分析是基于降维的思想,在尽可能不损失或者少损失原始数据信息的情况下,将错综复杂的众多变量聚合成少数几个独立的公共因子,这几个公共因子可以反映原来众多变量的主要信息,在减少变量个数的同时,又反映了变量之间的内在联系。

因子分析作用 :

通常因子分析有三种作用:一是用于因子降维,二是计算因子权重,三是计算加权计算因子汇总综合得分。

因子降维:使用因子分析对多个观测变量进行降维处理,有效提高数据处理效率,如将多个问卷题目降维为几个公共因子,用来分析用户对产品的印象、态度等。

计算因子权重:使用因子分析计算因子权重,将多个观测变量转换为几个公共因子,从而更好地理解观测变量之间的关系,如分析影响股票价格的因素。

计算加权计算因子汇总综合得分:使用因子分析计算加权综合得分,将多个观测变量转换为几个公共因子,并使用因子载荷计算加权得分,如评估企业综合风险等级。

因子分析流程:

第一步,导入对应的库

import pandas as pd
import numpy as np
import warnings
import empyrical
import dai
import bigcharts
import time 
warnings.filterwarnings('ignore')
print('导入包完成!')

第二步,建立因子数据,高频一般用python建立,其他因子一般利用sql建立,下面的简单的布林带因子boll_lower

  • 因子数据导入(目前仅支持单因子),更多因子见DAI-数据平台
params = {'group_num':10, 'factor_field':'ma_amount_60', 'instruments':'全市场', 'factor_direction':1, 'benchmark':'中证500', 'data_process':True} # instruments支持选项:沪深300、中证500、中证1000、全市场;benchmark支持的选项:沪深300、中证500、中证1000

sql = """
SELECT
    date, 
    instrument, 
    m_AVG(amount, 60) AS ma_amount_60
FROM
    cn_stock_bar1d
ORDER BY
    date, instrument;
"""

start_date = '2018-01-01'
end_date =  '2024-01-01'
factor_data = dai.query(sql, filters={"date": [start_date, end_date]}).df()
  • 设置参数
# params:字典格式。
# factor_field:因子在表中所对应的字段名称。 参数类型:str
# instruments:标的池,支持选项:沪深300、中证500、中证1000、全市场。 参数类型:str
# factor_direction:因子方向,取值为1、-1;1表示因子方向为正,因子值越大越好,-1表示因子值为负,因子值越小越好。 参数类型:int
# benchmark:基准对比指数,支持选项:沪深300、中证500、中证1000。 参数类型:str
# data_process:是否进行数据处理(包括去极值、标准化、中性化)。 参数类型:bool 

params = {'group_num':10, 'factor_field':'boll_lower', 'instruments':'全市场', 'factor_direction':1, 'benchmark':'中证500', 'data_process':True} 
  • 因子数据预处理
# 因子数据处理
factor_data.dropna(subset=[params['factor_field']], inplace=True)
factor_data = factor_data[['instrument', 'date', params['factor_field']]]
  • 数据查看
# factor_data:pandas.DataFrame格式,需要满足以下:
# instrument:str,以股票代码+.SH(沪市)或+.SZ(深市)或+.BJ(北交所)
# date:datetime64 
# factor:float64

factor_data

第三步,因子分析模块调用

alpha_instance = AlphaMiner(params=params, factor_data=factor_data)
report_html = alpha_instance.render() # 图表展示因子分析结果

第四步,因子分析结果评估

  • 参数说明&评估指标

portfolio:投资组合

 long多头组合是指在因子分析中因子值最大的一组,一般是第一组。

 short空头组合是指在因子分析中因子值最小的一组,一般是最后一组。

 long_short多空组合是指在因子分析中一般是因子值最大的组合减因子值最小的组合。

ic:信息系数

 Information Coefficient,代表预测值和实现值之间的相关性,通常用于评价因子预测股票收益的能力。

 I C ∈ [ -1 , 1 ],绝对值越大,代表预测能力越好。

 计算方式有两种:normal IC(IC)和rank IC,计算公式如下所示。

 其中normal IC必须满足数据服从正态分布的前提条件,但现实往往不理想,所以实际中更多人采用 rank IC(秩相关系数)来判断因子的有

 效性。两者分别对应Pearson 或Spearman 相关系数。
# 代码展示:
df['daily_ret'].corr(df['factor'], method='spearman')

ir:信息比率(因子)

 Information Ratio,代表因子获得稳定Alpha的能力。整个回测时段由多个调仓周期组成,每一个周期都会计算出一个不同的IC值。IR等于多个调仓周期的IC均值除以这些IC的标准

 方差。所以IR兼顾了因子的选股能力(由IC代表)和因子选股能力的稳定性(由IC的标准方差的倒数代表)。

# 代码展示:
ic_mean = np.nanmean(IC_data['g_ic'])
ir = np.nanmean(IC_data['g_ic']) / np.nanstd(IC_data['g_ic'])

return_ratio:总收益率

# 代码展示:
# series是日收益率数据
return_ratio =  series.sum() # 总收益
annual_return_ratio = series.sum() * 242 / len(series)  #  年度收益

ex_return_ratio:超额回报率

 超额回报率,也称为超额收益率或者超额利润率。它通常用来衡量投资或资产相对于某个基准(如市场平均水平或某个特定指数)的表现。

 超额回报率是投资收益与基准收益之间的差值,用百分比表示。
# 代码展示:
# series是日收益率数据,bm_series是基准日收益率数据
ex_return_ratio =  (series-bm_series).sum() # 超额总收益
ex_annual_return_ratio =  (series-bm_series).sum() * 242 / len( (series-bm_series))  #  超额年度收益

sharp_ratio:夏普比率

 夏普比率表示每承受一单位总风险,会产生多少的超额报酬,可以同时对策略的收益与风险进行综合考虑。

return_volatility:收益波动率

 收益波动率的计算公式有多种,常见的方法包括标准差法、平均绝对偏差法和GARCH模型等。标准差法计算步骤如下:
 a. 计算每期的收益率,即当前期的价格减去前一期的价格除以前一期的价格。
 b. 计算收益率序列的均值,即所有收益率的平均值。
 c. 计算每期收益率与均值之差的平方。
 d. 计算平方差的平均值。
 e. 取平均值的平方根,即得到收益波动率。

information_ratio:信息比率(策略)

 描述策略可能出现的最糟糕的情况,最极端可能的亏损情况。

max_drawdown:最大回撤

 描述策略可能出现的最糟糕的情况,最极端可能的亏损情况。

win_percent:胜率

 盈利次数在总交易次数中的占比。
# 代码展示:
# series是日收益率数据
sharp_ratio = empyrical.sharpe_ratio(series, 0.035/242)
return_volatility = empyrical.annual_volatility(series)
max_drawdown  = empyrical.max_drawdown(series)
information_ratio=series.mean()/series.std()
win_percent = len(series[series>0]) / len(series)
  • 整体绩效指标展示

  • 年度绩效指标展示(多头组合)

  • 因子组合的累计收益率曲线展示(含多空组合和基准市场组合)

  • IC曲线展示

  • 因子值最大/小的标的

因子分析模块代码完整版:

https://bigquant.com/codeshare/cfccdedb-4d8c-4ce7-bbe4-97ed053b5789

常见问题

\

反馈收集

尊敬的用户们:

感谢您一直以来的支持和关注!为了更好地优化和改进BigAlpha因子管理平台,我们特此发起这个关于产品意见反馈收集的主题。诚挚地邀请您在本帖中留言分享您在使用过程中的体验、建议及问题,您的反馈将对我们的产品持续改进起到至关重要的作用。期待您的参与,让我们携手共同打造更优质的产品体验!

如您在使用过程中遇到任何问题,欢迎扫码添加客服小Q进行咨询。

扫码添加客服微信


{{heading_numbering_zhCN}}

标签

量化投资风险投资回报收益率

文档

因子分析代码
评论
  • 因子分析模板会报错:
  • 已经更新了模板,可以使用了
  • 以“在乡镇工作中如何做到忠诚、尽责、自律”为题写一篇3000字左右的发言稿
  • 因子分析引入报错了,ModuleNotFoundError: No module named 'biglearning'
  • 棒,新模板顺利使用
{link}