Skip to content

问卷填写指引-文字

导航

正文

仅供参考论坛多逛 有几个帖子是第几期培训的课后作业比如某某course 评论区有作业答案及老师批改 多去理解

不要照抄 雷同卷机审会挂

4、What is the difference between Matrix Data and Vector Data?

(什么是 Matrix、Vector数据)

看learn

5、什么是long count?什么是short count?如何使用long count和short count的信息探查数据字段的统计特征?请给出具体案例

看learn

1. 概念定义

Long Count (多头计数):在特定的交易日,Alpha 策略分配为正权重(Weight > 0)的股票数量。它代表策略建议“做多”。

Short Count (空头计数):在特定的交易日,Alpha 策略分配为负权重(Weight < 0)的股票数量。它代表策略建议“做空”。

平台统计方式:在回测结果(ISSummary)中显示的数值是回测期间内每日多空股票数量的算术平均值。

2. 平台计算逻辑

这两个数值是 Alpha 组合构建流程的自然产物:

  • 原始信号生成:执行 Alpha 表达式,为股票池(Universe)中每只股票算出一个原始分值。
  • 中性化 (Neutralization):根据设置(如 Market,Industry)对分值进行处理(通常是减去组内均值),使向量之和为 0。
  • 标准化 (Normalization):对分值进行缩放,使所有股票权重的绝对值之和等于 1。
  • 判定与计数:
    • 最终权重 > 0 的股票计入 Long Count。
    • 最终权重 < 0 的股票计入 Short Count。
    • 权重为 0 或 NaN 的股票不计入。

3. 如何探查数据字段统计特征

通过在模拟设置中将 Neutralization 设为 "None" 且 Decay 设为0,可以利用多空计数获得以下洞察:

探查覆盖率 (Coverage)

使用表达式 datafield != 0 ? 1 : 0。所得的 Long Count 即为每日平均非零值标的数量。 (Long Count + Short Count) / Universe Size 即可得出近似覆盖率。

探查更新频率 (Frequency)

使用表达式 ts_std_dev(datafield, N) != 0 ? 1 : 0。 通过变换 N 的取值(如 5, 22, 66, 252 代表周、月、季、年),观察计数何时接近其实际覆盖率。

探查数值边界 (Bounds)

使用表达式 abs(datafield) > X。通过改变 X 的值观察 Long Count。 例如,若 X=1 时 Long Count 为 0,说明该字段数值均在 [-1, 1] 区间内。


anl4_cff_flag 是一个多值分类变量(Categorical Integer)。它不仅仅告诉你“有没有预测”,还通过不同的数值告诉你“预测的具体性质”。

2. 揭示了预测行为的“常态”

在分析师数据集中,数值通常对应如下含义:

  • 1 = New(新发布的预测):这只发生在分析师第一次开始覆盖这只股票,或者断更很久后重新开始。
  • 2 = Revision(修订):分析师修改了之前的预测数值。
  • 3 = Confirmation/Reiteration(重申):分析师确认之前的预测仍然有效,没有修改数值。

为什么 Long Count 接近 2000?

这说明在 TOP3000 宇宙中,绝大多数股票(约 2/3)在当前时点,分析师的行为是“修订”或“确认”,而不是“新发布”。这非常符合实际金融市场逻辑:成熟的股票始终有人盯着,数据更新大多是在原有基础上的修正。

3. 如何继续利用这个实验向下探查?

既然 > 1 有 2000 个,你可以继续调整 X 的值来定位这些数值的分布:

  • 尝试 abs(anl4_cff_flag) > 2
    • 如果 Long Count 骤减(比如降到 100),说明大部分值是 2(修订)。
    • 如果 Long Count 依然很大(比如 1800),说明大部分值是 3(重申)。
  • 尝试 abs(anl4_cff_flag) > 3
    • 如果 Long Count 变为 0,说明该字段的最大取值就是 3。

结论与建议

你通过实验发现 abs(...) > 1 覆盖了 2000 只股票,这说明:

  1. 它是一个强力过滤器:它排除了那些“刚刚被关注”或“没有被关注”的冷门股票。
  2. 数值具有偏向性:该字段在绝大多数时间里取值都大于 1(即 2 或 3)。
  3. Alpha 构建提示:如果你想找“惊喜”,可能需要关注 anl4_cff_flag == 2(修订)的股票;如果你想找“稳健”,可能关注取值为 3(重申)的股票。

一句话总结: Long Count 不为零,说明该字段的取值范围超出了 [-1,1],它承载了比简单开关更复杂的“预测状态”信息。

探查数据分布 (Distribution)

使用 X < scale_down(datafield) && scale_down(datafield) < Y(scale_down 会保留原始分布)。 通过调整 X 和 Y (0 到 1 之间),可以探查数据在不同分位区间的密集程度。

4. 具体案例

案例:探查基本面字段 anl4_cff_flag 的更新频率

假设你想了解分析师预测字段 anl4_cff_flag(融资活动现金流预测类型)是每天更新还是按季度更新:

  • 步骤一:基准覆盖率检查。运行 anl4_cff_flag != 0 ? 1 : 0,设置中性化为 None。假设得到Long Count 为 2000。
  • 步骤二:探测季度更新。运行 ts_std_dev(anl4_cff_flag, 66) != 0 ? 1 : 0(N=66 约为一季度)。

结果分析 A:如果此时 Long Count 接近2000,说明该数据在大约一个季度的时间窗口内,绝大多数标的都发生过一次数值跳变,即为季度更新。

结果分析 B:如果所得 Long Count 仅为 100左右,说明一个季度内只有极少数股票更新了该数据,可能该字段是年度更新甚至更低频的事件驱动型数据。

案例:验证字段符号

运行表达式 close <= 0。在结果中你会发现 Long Count 和 Short Count 均为 0,这从统计上证实了收盘价字段始终为正值。


6、请查阅Learn页面的有关文档结合文档谈谈您对中性化(neutralization)的理解及其计算过程

中性化是一种将 Alpha 原始分值在特定分组内进行去均值化的操作。其核心目标是:

  • 消除特定风险暴露:如果不进行中性化,你的策略可能只是在赌整个市场或某个行业会上涨(即Beta 风险)。中性化确保你专注于研究分组内部股票的相对回报。
  • 实现多空平衡:中性化后,Alpha向量的平均值为零,这意味着在投资组合中,做多(Long)和做空(Short)的金额大致相等。
  • 防御系统性冲击:它可以保护投资组合免受市场整体波动或特定行业性黑天鹅事件的影响。

计算过程及案例

中性化的计算逻辑非常直观

setting中的设置:

  1. 分组 (Grouping): 根据设置,将全市场的股票划分为不同的组。常见的分类包括:
  • Market (全市场):将所有股票视为一个大组。
  • Sector (部门):如工业、科技等大类。
  • Industry (行业):更细的划分,如机械行业。
  • Subindustry (子行业):最细的划分,如农用机械。
  1. 计算组内均值 (Mean Calculation): 在每一个独立的组内,计算该组所有股票 Alpha 原始分值的算术平均值。

  2. 减去均值 (De-meaning): 对于组内的每一只股票,用其原始分值减去该组的平均值。这是最关键的一步,强制使该组的平均值变为 0。

  3. 后续处理: 中性化后的向量会进行归一化(Normalization)和缩放(Scaling),以匹配设定的账面规模(Booksize)。最终生成的权重向量正负号即决定了多空方向。

BRAIN 平台上两种中性化方式

在 BRAIN 平台上,有两种方式可以实现中性化,其效果是等价的:

  • Simulation Settings (模拟设置):在 settings 中直接选择 Neutralization 的级别(如 Market, Industry)。这是最后一步执行的操作。
  • group_neutralize(x, group) 运算符:如果你想在表达式的中间阶段应用中性化,或者需要更细颗粒度的控制,可以使用该算子。

注:如果在表达式中手动使用了 group_neutralize,建议在模拟设置中将 Neutralization 设为 "None",以避免重复计算。

实际案例:行业中性化(Industry Neutralization)

以 USA TOP3000 股票池中的 6 家虚拟公司(A 到 F)为例,使用基本面字段 fnd6_sales(销售额) 来演示行业中性化的完整计算过程。

1. 原始数据探查

公司代码所属行业原始销售额分值 (fnd6_sales)备注
公司 A零售 (Retail)1200零售组最高
公司 B零售 (Retail)800零售组平均
公司 C零售 (Retail)400零售组最低
公司 D科技 (Tech)150科技组最高
公司 E科技 (Tech)100科技组平均
公司 F科技 (Tech)50科技组最低

2. 计算过程

步骤 1:计算各行业组内均值

  • 零售行业均值 = (1200 + 800 + 400) ÷ 3 = 800
  • 科技行业均值 = (150 + 100 + 50) ÷ 3 = 100

步骤 2:执行中性化(减去组内均值)

  • 公司 A: 1200 − 800 = +400
  • 公司 B: 800 − 800 = 0
  • 公司 C: 400 − 800 = −400
  • 公司 D: 150 − 100 = +50
  • 公司 E: 100 − 100 = 0
  • 公司 F: 50 − 100 = −50

步骤 3:权重归一化 绝对值之和 = |400| + |0| + |−400| + |50| + |0| + |−50| = 900 最终权重 = 中性化分值 ÷ 900

公司中性化分值最终权重 (Weight)多空操作
公司 A+400+0.444重仓做多
公司 B00.000不持仓
公司 C−400−0.444重仓做空
公司 D+50+0.056轻仓做多
公司 E00.000不持仓
公司 F−50−0.056轻仓做空

3. 结果解读:为什么必须中性化?

  1. 纠正“行业歧视” 不中性化会被行业体量误导,中性化后只看组内相对强弱。

  2. 消除市场风险 (Beta) 多头总权重 +0.5,空头总权重 −0.5,组合净敞口为0,赚取纯Alpha。

  3. 组内平衡 每个行业组内多空之和为0,抵御行业整体波动。

通俗解释

把行业当班级,先算班级平均分,再看每个人高于/低于平均分多少,只比较同班里的相对强弱。


7、请查阅Learn的Alpha Example系列文章,选择其中一个进行复现,阐述您的理解,以及您做出的改进与提升,并提供具体思考过程和原因。

close / open(收盘价 / 开盘价,即“日内收益率”)为例。

1. 基础案例复现:日内动量 (Intraday Momentum)

  • 基础表达式:close / open
  • 理解:衡量股票日内涨跌,>1 代表日内上涨。
  • 假设:日内强势股票次日延续动量。

问题:单日噪音大、换手率极高,回测效果差。

2. 改进与提升过程

改进一:消除单日噪音(平滑处理)

  • 思考:单日 close/open 随机性太强,需捕捉持续信号。
  • 动作:ts_mean(close / open, 10)
  • 原因:取10日均值,过滤偶然波动,识别持续吸筹标的。

改进二:相对强弱排名(横截面标准化)

  • 思考:市场普涨时绝对数值无意义,需相对排名。
  • 动作:rank(ts_mean(close / open, 10))
  • 原因:全市场排名,锁定相对最强标的。

改进三:波动率校准(风险调整)

  • 思考:高波动股票均值高但风险大,需剔除干扰。
  • 动作:ts_zscore(close / open, 20)
  • 原因:对比自身历史波动,识别异常且稳健的强势。

3. 最终改进后的 Alpha 表达式

rank(ts_mean(ts_zscore(close / open, 20), 5))

逻辑解析:

  1. close/open:基础日内强弱
  2. ts_zscore(...,20):剔除自身波动干扰
  3. ts_mean(...,5):取一周平均,保证持续性
  4. rank(...):全市场横截面排名

建议模拟设置:

  • Neutralization: SECTOR
  • Decay: 2

总结: 原版:谁今天涨了?(噪音大) 改进版:谁最近一周日内走势比自身更稳健持续强势?(信号更可靠)


8、请阐述如何通过 BRAIN 平台网页获取 Alpha ID

  1. 登录 BRAIN 平台,点开一个alpha,带你open details in a new tab,在地址栏中的最后一个标识符,就是alpha id

9、请详尽列举Genius计划各个级别大的名称及其对应的季度奖金范围

级别名称季度奖金范围
Grandmaster(大师级)最高档奖金区间
Master(专家级)高档奖金区间
Expert(精英级)中高档奖金区间
Gold(黄金级)基础档奖金区间