main
parent
32f27b6baf
commit
2279addf83
@ -0,0 +1,30 @@ |
||||
**中文版本** |
||||
|
||||
**名称** |
||||
机构投资者持仓集中度反转效应 |
||||
|
||||
**假设** |
||||
当一家公司的机构投资者持仓高度集中(如前五大机构持股比例显著高于历史中位数),可能意味着该股票短期内因资金抱团而出现估值泡沫;但随着机构调仓或共识分化,持仓集中度会逐步下降,导致股价回调。反之,若机构持仓集中度从低位持续回升,则预示机构资金重新形成共识,可能推动股价上涨。 |
||||
|
||||
**实施方案** |
||||
使用机构持股明细数据,计算每季度前五大机构持股比例之和的横截面分位数排名。通过时序差分算子(如 `ts_delta`)监测持仓集中度的变化方向与幅度,对集中度从高位(前30%)显著回落(分位数下降超过20%)的股票建立空头仓位,对集中度从低位(后30%)持续攀升(分位数上升超过20%)的股票建立多头仓位。 |
||||
|
||||
**阿尔法因子优化建议** |
||||
不同市值风格股票的机构行为差异显著(如大盘股机构持仓稳定性更高)。建议按市值分档进行动态中性化处理,并在因子中引入“机构持仓稳定性”指标(如持仓周期方差)作为调节参数,对稳定性低的股票赋予更高权重,以捕捉短期调仓带来的反转机会。 |
||||
|
||||
--- |
||||
|
||||
**英文 Version** |
||||
|
||||
**Name** |
||||
Institutional Ownership Concentration Reversal Effect |
||||
|
||||
**Hypothesis** |
||||
When a company's institutional ownership is highly concentrated (e.g., the combined holdings of the top five institutions significantly exceed the historical median), it may indicate short-term valuation bubbles due to herd behavior. However, as institutions rebalance or consensus diverges, concentration tends to decline, leading to price corrections. Conversely, a sustained increase in concentration from low levels signals renewed institutional consensus, potentially driving price appreciation. |
||||
|
||||
**Implementation** |
||||
Using institutional holding data, calculate the cross-sectional percentile rank of the combined ownership proportion of the top five institutions each quarter. Apply a time-series difference operator (e.g., `ts_delta`) to track changes in concentration. Establish short positions for stocks whose concentration drops significantly (percentile decline >20%) from high levels (top 30%), and long positions for stocks whose concentration rises persistently (percentile increase >20%) from low levels (bottom 30%). |
||||
|
||||
**Alpha Factor Optimization Suggestion** |
||||
Institutional behavior varies significantly across market capitalizations (e.g., large-cap stocks exhibit higher holding stability). Recommend dynamic neutralization by market cap buckets and incorporate an "institutional holding stability" metric (e.g., variance of holding periods) as a modulation parameter. Assign higher weights to stocks with low stability to capture short-term rebalancing-driven reversals. |
||||
|
||||
@ -0,0 +1,26 @@ |
||||
**名称** |
||||
智能资本配置效率因子 |
||||
|
||||
**假设** |
||||
企业资本配置效率——即单位资本投入所创造的自由现金流或经济增加值——是衡量管理层战略执行力的核心指标。若某公司持续在低回报项目上投入资本(如ROIC < WACC),即使营收增长强劲,其长期估值也将被市场重估下行;反之,若公司能将资本精准投向高回报领域(如ROIC > WACC且持续扩张),即使短期增速平缓,也可能获得估值溢价。市场对资本配置效率的定价存在滞后性,尤其在财报季或战略发布会后,该因子可捕捉预期差带来的超额收益。 |
||||
|
||||
**实施方案** |
||||
构建“资本配置效率得分” = (ROIC - WACC) × 资本支出增速 × 自由现金流/资本支出。使用时序算子对过去三年数据进行滚动计算,识别效率持续恶化(后20%分位)的公司建立空头仓位,效率持续提升(前20%分位)的公司建立多头仓位。为消除行业差异,采用行业中性化处理,仅在同行业内部进行横截面排序。 |
||||
|
||||
**阿尔法因子优化建议** |
||||
建议引入“资本配置意图”文本因子:通过财报电话会或年报管理层讨论部分,提取“投资方向”“回报目标”“资本纪律”等关键词,构建语义匹配得分,与量化效率得分进行加权融合。当文本信号与量化信号一致时,增强因子权重;当出现背离(如管理层声称“聚焦高回报领域”但实际ROIC持续下滑),则触发信号衰减或屏蔽机制,以降低误判风险。 |
||||
|
||||
--- |
||||
|
||||
**Name** |
||||
Smart Capital Allocation Efficiency Factor |
||||
|
||||
**Assumption** |
||||
Corporate capital allocation efficiency — i.e., the free cash flow or economic value added generated per unit of capital invested — is a core indicator of management’s strategic execution. Companies that persistently allocate capital to low-return projects (e.g., ROIC < WACC), even with strong revenue growth, are likely to face downward valuation re-rating over time. Conversely, firms that precisely deploy capital into high-return areas (e.g., ROIC > WACC and expanding) may earn valuation premiums even with modest short-term growth. The market often prices capital allocation efficiency with a lag, especially after earnings seasons or strategic announcements, offering opportunities to capture alpha from expectation gaps. |
||||
|
||||
**Implementation Plan** |
||||
Construct a “Capital Allocation Efficiency Score” = (ROIC - WACC) × Capital Expenditure Growth Rate × Free Cash Flow / Capital Expenditure. Use time-series operators to compute rolling 3-year metrics, identifying firms with persistently deteriorating efficiency (bottom 20% percentile) for short positions, and those with improving efficiency (top 20% percentile) for long positions. To mitigate industry bias, apply industry-neutralization by ranking only within peer groups. |
||||
|
||||
**Alpha Factor Optimization Suggestions** |
||||
Introduce a “Capital Allocation Intent” textual factor: extract keywords such as “investment focus,” “return targets,” and “capital discipline” from earnings call transcripts or management discussion sections in annual reports to build a semantic matching score. Fuse this with the quantitative efficiency score via weighted combination. When textual and quantitative signals align, amplify the factor weight; when they diverge (e.g., management claims “focusing on high-return areas” while ROIC continues to decline), trigger signal decay or suppression to reduce false positives. |
||||
|
||||
@ -0,0 +1,26 @@ |
||||
**名称** |
||||
品牌情绪滞后溢价因子 |
||||
|
||||
**假设** |
||||
消费者对品牌的正面情绪(如社交媒体好评、搜索热度、用户评分等)通常在品牌营销活动或产品发布后逐步积累,但市场对品牌价值的定价往往滞后于情绪变化。当品牌情绪持续上升但股价尚未充分反应时,存在“情绪-价格”错配机会;反之,当情绪拐头向下而股价仍高位运行时,可能预示回调风险。该因子捕捉品牌情绪与股价反应之间的时滞效应,构建“情绪动量领先于价格动量”的超额收益逻辑。 |
||||
|
||||
**实施方案** |
||||
构建“品牌情绪综合指数”,整合多源数据(如社交媒体情感得分、品牌搜索指数、用户评分趋势、电商评论情感等),通过时序平滑算子(如ts_ewma)消除短期噪声。使用ts_lag算子将情绪指数滞后3-6个月,与同期股价收益率进行滚动相关性分析。对情绪指数领先股价动量且相关性显著为正的公司建立多头仓位;对情绪拐点已现但股价仍上涨的公司建立空头仓位。采用行业中性化处理,避免行业情绪周期干扰。 |
||||
|
||||
**阿尔法因子优化建议** |
||||
建议引入“情绪拐点识别算子”,通过ts_slope或ts_change_rate识别情绪趋势的转折点,仅在拐点确认后触发仓位调整,以降低假信号。同时,可叠加“品牌护城河强度”作为调节变量——在品牌忠诚度高、替代品少的行业中,情绪滞后效应更显著,可对这类公司赋予更高权重。此外,建议在季度财报发布前后对情绪因子进行动态再平衡,以捕捉业绩兑现对情绪定价的加速作用。 |
||||
|
||||
--- |
||||
|
||||
**Name** |
||||
Brand Sentiment Lag Premium Factor |
||||
|
||||
**Assumption** |
||||
Consumer sentiment toward a brand (e.g., social media praise, search volume, user ratings) typically accumulates gradually after marketing campaigns or product launches, but the market’s pricing of brand value often lags behind sentiment shifts. When brand sentiment rises persistently but stock prices have not yet fully reflected it, a “sentiment-price” mispricing opportunity emerges; conversely, when sentiment turns downward while prices remain elevated, it may signal an impending correction. This factor captures the time-lag effect between brand sentiment and price reaction, building an alpha logic based on “sentiment momentum leading price momentum.” |
||||
|
||||
**Implementation** |
||||
Construct a “Brand Sentiment Composite Index” by integrating multi-source data (e.g., social media sentiment scores, brand search trends, user rating trajectories, e-commerce review sentiment). Apply a time-series smoothing operator (e.g., ts_ewma) to filter out short-term noise. Use the ts_lag operator to shift the sentiment index by 3–6 months, then compute rolling correlations with concurrent stock returns. Establish long positions in companies where sentiment leads price momentum with statistically significant positive correlation; establish short positions in companies where sentiment has peaked but prices continue rising. Apply industry-neutralization to mitigate industry-specific sentiment cycles. |
||||
|
||||
**Alpha Factor Optimization Suggestions** |
||||
It is recommended to introduce a “sentiment inflection point detection operator” using ts_slope or ts_change_rate to identify trend reversals, triggering position adjustments only after confirmation to reduce false signals. Additionally, overlay “brand moat strength” as a moderating variable — in industries with high brand loyalty and low substitutability, the sentiment lag effect is more pronounced, allowing higher weights for such companies. Furthermore, consider dynamically rebalancing the sentiment factor around quarterly earnings releases to capture accelerated pricing effects from earnings realization. |
||||
|
||||
@ -0,0 +1,39 @@ |
||||
group_neutralize(ts_decay_linear(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), 252, false), bucket(rank(forward_price_120))) |
||||
|
||||
multiply(ts_rank(ts_delta(news_max_up_amt, 21), 63), sign(ts_av_diff(anl4_netdebt_flag, 42))) |
||||
|
||||
if_else(fnd2_a_ltrmdmrepopliny5 > ts_mean(fnd2_a_ltrmdmrepopliny5, 84), ts_zscore(forward_price_120, 126), reverse(ts_zscore(forward_price_120, 126))) |
||||
|
||||
group_zscore(ts_sum(fnd6_newqeventv110_cibegniq, 42), bucket(rank(ts_decay_linear(news_max_up_amt, 63, false)))) |
||||
|
||||
ts_regression(forward_price_120, fnd6_newqeventv110_cibegniq, 84, 0, 0) |
||||
|
||||
multiply(ts_scale(anl4_netdebt_flag, 63), rank(ts_delta(fnd2_a_ltrmdmrepopliny5, 21))) |
||||
|
||||
group_neutralize(ts_corr(forward_price_120, news_max_up_amt, 42), bucket(ts_rank(fnd6_newqeventv110_cibegniq, 21))) |
||||
|
||||
if_else(ts_mean(anl4_netdebt_flag, 63) > 0, ts_av_diff(fnd2_a_ltrmdmrepopliny5, 84), ts_backfill(fnd2_a_ltrmdmrepopliny5, 42)) |
||||
|
||||
multiply(ts_decay_linear(ts_std_dev(fnd6_newqeventv110_cibegniq, 42), 126, false), zscore(forward_price_120)) |
||||
|
||||
group_rank(ts_delta(news_max_up_amt, 21), bucket(ts_rank(anl4_netdebt_flag, 63))) |
||||
|
||||
ts_sum(multiply(ts_zscore(fnd2_a_ltrmdmrepopliny5, 84), sign(ts_delta(forward_price_120, 21))), 42) |
||||
|
||||
if_else(ts_rank(fnd6_newqeventv110_cibegniq, 63) > 0.5, ts_covariance(news_max_up_amt, anl4_netdebt_flag, 42), reverse(ts_covariance(news_max_up_amt, anl4_netdebt_flag, 42))) |
||||
|
||||
group_scale(ts_backfill(fnd2_a_ltrmdmrepopliny5, 21), bucket(ts_mean(forward_price_120, 84))) |
||||
|
||||
multiply(ts_quantile(fnd6_newqeventv110_cibegniq, 63), rank(ts_av_diff(news_max_up_amt, 42))) |
||||
|
||||
ts_regression(anl4_netdebt_flag, forward_price_120, 126, 0, 1) |
||||
|
||||
group_neutralize(ts_delta(fnd2_a_ltrmdmrepopliny5, 21), bucket(ts_scale(fnd6_newqeventv110_cibegniq, 63))) |
||||
|
||||
if_else(ts_mean(news_max_up_amt, 42) > ts_delay(news_max_up_amt, 21), ts_std_dev(anl4_netdebt_flag, 84), ts_sum(anl4_netdebt_flag, 84)) |
||||
|
||||
multiply(ts_decay_linear(ts_corr(forward_price_120, fnd2_a_ltrmdmrepopliny5, 63), 126, false), zscore(fnd6_newqeventv110_cibegniq)) |
||||
|
||||
group_zscore(ts_product(news_max_up_amt, 21), bucket(ts_rank(anl4_netdebt_flag, 42))) |
||||
|
||||
ts_sum(if_else(fnd6_newqeventv110_cibegniq > ts_mean(fnd6_newqeventv110_cibegniq, 63), ts_delta(forward_price_120, 21), reverse(ts_delta(forward_price_120, 21))), 84) |
||||
@ -0,0 +1,20 @@ |
||||
group_neutralize(ts_decay_linear(ts_std_dev(divide(fnd6_newqeventv110_cibegniq,forward_price_120),63),252),subindustry) |
||||
group_neutralize(ts_delta(ts_zscore(ts_sum(fnd6_newqeventv110_cibegniq,126),63),21),subindustry) |
||||
group_neutralize(multiply(ts_rank(ts_av_diff(fnd6_newqeventv110_cibegniq,63),126),sign(ts_delta(forward_price_120,21))),subindustry) |
||||
group_neutralize(ts_corr(ts_decay_linear(fnd6_newqeventv110_cibegniq,126),forward_price_120,63),subindustry) |
||||
group_neutralize(divide(ts_mean(fnd6_newqeventv110_cibegniq,63),ts_std_dev(forward_price_120,126)),subindustry) |
||||
group_neutralize(ts_rank(ts_backfill(fnd6_newqeventv110_cibegniq,63),252),subindustry) |
||||
group_neutralize(subtract(ts_product(fnd6_newqeventv110_cibegniq,63),ts_mean(forward_price_120,126)),subindustry) |
||||
group_neutralize(power(ts_delta(fnd6_newqeventv110_cibegniq,21),ts_rank(forward_price_120,63)),subindustry) |
||||
group_neutralize(ts_scale(ts_sum(fnd6_newqeventv110_cibegniq,126),252),subindustry) |
||||
group_neutralize(if_else(ts_arg_max(fnd6_newqeventv110_cibegniq,63)>ts_arg_min(forward_price_120,63),ts_mean(fnd6_newqeventv110_cibegniq,126),ts_std_dev(forward_price_120,126)),subindustry) |
||||
group_neutralize(ts_regression(fnd6_newqeventv110_cibegniq,forward_price_120,63,0,0),subindustry) |
||||
group_neutralize(ts_quantile(divide(fnd6_newqeventv110_cibegniq,forward_price_120),63),subindustry) |
||||
group_neutralize(signed_power(ts_covariance(fnd6_newqeventv110_cibegniq,forward_price_120,126),ts_delta(forward_price_120,21)),subindustry) |
||||
group_neutralize(ts_count_nans(fnd6_newqeventv110_cibegniq,63),subindustry) |
||||
group_neutralize(ts_decay_linear(ts_zscore(fnd6_newqeventv110_cibegniq,126),252),subindustry) |
||||
group_neutralize(ts_backfill(ts_av_diff(fnd6_newqeventv110_cibegniq,63),126),subindustry) |
||||
group_neutralize(ts_step(ts_delta(fnd6_newqeventv110_cibegniq,21)),subindustry) |
||||
group_neutralize(ts_arg_min(ts_mean(fnd6_newqeventv110_cibegniq,63),126),subindustry) |
||||
group_neutralize(ts_arg_max(ts_std_dev(forward_price_120,63),126),subindustry) |
||||
group_neutralize(ts_rank(ts_corr(fnd6_newqeventv110_cibegniq,forward_price_120,63),252),subindustry) |
||||
@ -0,0 +1,39 @@ |
||||
ts_rank(fnd6_capxv, 252) |
||||
|
||||
ts_scale(fnd6_ciother, 252) |
||||
|
||||
ts_zscore(sales_ps, 252) |
||||
|
||||
group_zscore(fnd6_newqeventv110_spcedq, pv13_h_min2_focused_sector) |
||||
|
||||
group_rank(fnd6_newqv1300_ciotherq, pv13_h_min22_1000_sector) |
||||
|
||||
ts_std_dev(fscore_bfl_total, 126) |
||||
|
||||
ts_decay_linear(multi_factor_acceleration_score_derivative, 60) |
||||
|
||||
ts_corr(anl4_netdebt_flag, min_reported_eps_guidance, 90) |
||||
|
||||
ts_covariance(sg_and_admin_min_guidance_value, fn_def_tax_assets_liab_net_q, 180) |
||||
|
||||
ts_mean(fn_def_tax_liab_a, 60) |
||||
|
||||
ts_sum(fn_liab_fair_val_a, 120) |
||||
|
||||
ts_arg_max(fn_op_lease_min_pay_due_in_2y_a, 252) |
||||
|
||||
ts_arg_min(fn_treasury_stock_shares_a, 126) |
||||
|
||||
ts_av_diff(fnd6_capxv, 90) |
||||
|
||||
ts_quantile(fnd6_ciother, 252, "uniform") |
||||
|
||||
ts_regression(sales_ps, fscore_bfl_total, 180, 0, 1) |
||||
|
||||
ts_product(multi_factor_acceleration_score_derivative, 30) |
||||
|
||||
ts_backfill(anl4_netdebt_flag, 60, 1, "NAN") |
||||
|
||||
ts_delay(min_reported_eps_guidance, 5) |
||||
|
||||
ts_delta(sg_and_admin_min_guidance_value, 20) |
||||
@ -0,0 +1,39 @@ |
||||
multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv) |
||||
|
||||
ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750) |
||||
|
||||
group_neutralize(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), pv13_h_min2_focused_sector) |
||||
|
||||
rank(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750)) |
||||
|
||||
group_rank(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), pv13_h_min2_focused_sector) |
||||
|
||||
ts_scale(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
group_scale(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), pv13_h_min2_focused_sector) |
||||
|
||||
ts_zscore(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
group_zscore(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), pv13_h_min2_focused_sector) |
||||
|
||||
ts_decay_linear(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_arg_max(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_arg_min(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_av_diff(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_std_dev(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_sum(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
|
||||
ts_corr(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), sales_ps, 750) |
||||
|
||||
ts_covariance(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), sales_ps, 750) |
||||
|
||||
ts_regression(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), sales_ps, 750, 0, 0) |
||||
|
||||
ts_quantile(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750, "gaussian") |
||||
|
||||
ts_rank(ts_mean(multiply(subtract(fnd6_oiadps, fnd6_spce), fnd6_capxv), 750), 750) |
||||
@ -0,0 +1,39 @@ |
||||
rank(ts_decay_linear(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
rank(ts_decay_linear(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
ts_rank(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
ts_rank(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
rank(ts_decay_linear(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
rank(ts_decay_linear(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
ts_rank(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
ts_rank(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 252)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
rank(ts_decay_linear(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
rank(ts_decay_linear(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
ts_rank(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
ts_rank(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
rank(ts_decay_linear(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
rank(ts_decay_linear(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
ts_rank(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
ts_rank(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 126), bucket(rank(ts_rank(forward_price_120, 126)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
rank(ts_decay_linear(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 63)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
rank(ts_decay_linear(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 63)), buckets = "2,5,6,7,10")), 252)) |
||||
|
||||
ts_rank(group_zscore(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 63)), buckets = "2,5,6,7,10")), 252) |
||||
|
||||
ts_rank(group_neutralize(ts_std_dev(fnd6_newqeventv110_cibegniq, 63), bucket(rank(ts_rank(forward_price_120, 63)), buckets = "2,5,6,7,10")), 252) |
||||
@ -0,0 +1,165 @@ |
||||
负债增值 |
||||
[[假设]] |
||||
负债公允价值上升可能意味着公司承担了高于预期的成本。这种情况可能恶化公司的财务健康状况,进而导致盈利能力下降或引发财务困境。 |
||||
[[实施方案]] |
||||
基于基本面数据,当负债公允价值在一年内出现上升时建立空头仓位,反之则建立多头仓位。 |
||||
[[实施优化建议]] |
||||
能否通过缩短观测周期(例如季度数据)来提升策略准确性? |
||||
|
||||
递延收入 |
||||
[[假设]] |
||||
递延收入较高的公司在未来确认收入时,往往会给市场带来超预期表现。 |
||||
[[实施方案]] |
||||
fnd6_drc字段代表递延收入。为提高数据字段覆盖度,需使用时序回填算子。将递延收入除以总资产以消除企业规模影响。 |
||||
[[实施优化建议]] |
||||
建议采用横截面算子代替原始比率值来确定股票权重。可运用分组算子对同类股票进行横向比较。 |
||||
|
||||
降低负债水平 |
||||
[[假设]] |
||||
对负债相较过往有所减少的公司建立多头仓位,反之对负债增加的公司建立空头仓位。 |
||||
[[实施方案]] |
||||
采用基础数据“负债”验证该假设,使用时序分位数算子分析该字段过去六个月的变化趋势。 |
||||
[[阿尔法因子优化建议]] |
||||
利用算子的驱动参数对负债数据进行分布形态转换。 |
||||
|
||||
财务杠杆效应 |
||||
[[假设]] |
||||
高负债资产比率的企业——若财务状况稳健、现金流充裕——常将债务作为战略工具推动扩张性增长。通过有效运用财务杠杆,这类公司将借贷资金投入高潜力项目,从而更可能获得超额收益。 |
||||
[[实施方案]] |
||||
采用"负债"与"资产"数据构建比率指标。 |
||||
[[阿尔法因子优化建议]] |
||||
该比率在不同行业间差异显著,是否值得采用替代性行业中性化处理方案? |
||||
|
||||
社交媒体效应 |
||||
[[假设]] |
||||
表现不佳的股票在社交媒体平台上通常会被更频繁地讨论,因此可能产生更高的相对情绪讨论量,建议考虑对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
若监测到情绪讨论量增加,则通过社交媒体数据字段施加负权重配置。 |
||||
|
||||
估值偏离波动空头策略 |
||||
[[假设]] |
||||
价值因子与动量因子在股票中通常不相关,若某只股票同时呈现高动量与高价值评分相关性,则表明其股价与内在价值存在偏离——据此我们对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
使用ts_corr()函数测算过去三年间估值评分与动量评分的相关性,通过ts_backfill()算子对前期缺失数据进行回填。 |
||||
[[阿尔法因子优化建议]] |
||||
建议运用分组算子与模型数据,在同类股票组内进行横向比较分析。 |
||||
|
||||
网络依存度 |
||||
[[假设]] |
||||
数据字段中较高的枢纽评分意味着企业客户拥有广泛业务连接,而较低评分则表明合作伙伴集中度较高。若企业的客户枢纽评分偏低,说明其客户合作伙伴较少,可能更依赖该企业。这对企业股票具有积极意义,意味着被替代风险较低,因此长期持有此类股票或是明智选择。 |
||||
[[实施方案]] |
||||
基于价量数据,对过去两年客户枢纽评分持续较低的企业股票建立多头仓位。 |
||||
[[阿尔法因子优化建议]] |
||||
在现有表达式基础上叠加横截面算子是否有助于提升策略表现? |
||||
|
||||
新闻驱动型波动率 |
||||
[[假设]] |
||||
新闻发布后股价波动剧烈的公司股票,往往受到市场情绪分化影响,可能引发剧烈波动行情。建议在近期新闻发布导致的极端波动阶段回避交易。 |
||||
[[实施方案]] |
||||
使用'news_session_range'新闻数据字段,通过'ts_backfill'算子提升数据覆盖度。结合'ts_arg_max'算子识别过去一季度内达到最大波动值的交易天数距离当前的时间间隔。该间隔天数越短,股票在阿尔法向量中的配置权重越低。 |
||||
[[阿尔法因子优化建议]] |
||||
近期新闻事件的影响时效有限,采用对接近零值数据快速调整阿尔法权重的算子(而非均等处理远期数据)能否提升策略表现?同时,使用交易条件限定算子是否有助于降低换手率? |
||||
|
||||
隐含波动率价差预测因子 |
||||
[[假设]] |
||||
若看涨期权未平仓量高于看跌期权未平仓量,基于隐含波动率价差强度指标,股票可能出现上涨行情;反之则可能下跌。 |
||||
[[实施方案]] |
||||
使用'trade_when'算子,以看涨-看跌期权未平仓量比值为条件。当该比值小于1时,基于隐含波动率价差强度指标建立股票多头仓位(采用期权数据)。 |
||||
[[阿尔法因子优化建议]] |
||||
基于自建分组(如历史波动率分组)对阿尔法因子进行自定义中性化处理,能否提升细分市场的策略表现?可结合分档算子或分层算子与排序算子实现自定义中性化。 |
||||
|
||||
|
||||
|
||||
研发转化滞后效应 |
||||
|
||||
[[假设]] |
||||
高研发投入的公司若未能及时将研发成果转化为商业产出,可能面临资本效率低下和未来增长动力不足的风险。这类公司通常具有较高的研发费用资本化率,但专利产出或新产品收入占比偏低,市场可能在一段时间后重新评估其研发效率,导致股价回调。 |
||||
|
||||
[[实施方案]] |
||||
基于研发费用资本化金额与专利授权数量(或新产品销售收入)构建“研发转化效率比”。使用时序滞后算子将专利数据滞后6-12个月以匹配研发投入周期,再通过ts_mean计算过去三年的平均转化效率。对效率持续偏低(后30%)的公司建立空头仓位,对效率显著提升(前30%)的公司建立多头仓位。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
不同行业的研发周期和转化模式差异巨大(如医药vs软件)。是否可采用行业动态分档,在各自行业队列内计算转化效率的分位数排名,以消除行业特性带来的偏差? |
||||
|
||||
供应链韧性溢价 |
||||
|
||||
--- |
||||
|
||||
[[假设]] |
||||
拥有多元化、抗冲击供应链的公司在面临全球性或区域性供应链中断时,表现出更强的营收稳定性和更快的恢复能力。这种韧性在危机期间被市场低估,但在多次冲击后会被逐步定价,形成长期超额收益。 |
||||
|
||||
[[实施方案]] |
||||
整合供应商集中度、关键物料替代源数量、物流枢纽分布广度等数据字段,构建“供应链韧性评分”。使用时序波动率算子计算该评分在过往供应链危机事件期(如疫情、地缘冲突)内的稳定性,并对稳定性高的公司赋予正向权重。采用ts_zscore对评分进行标准化,结合横截面排序动态调整仓位。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入事件驱动算子,仅在监测到供应链压力指数(如全球物流延误指数)突破阈值时触发该因子,以提升策略的敏锐度和稀疏性,降低非危机时期的无效换手。 |
||||
|
||||
--- |
||||
|
||||
碳排放强度收敛交易 |
||||
|
||||
[[假设]] |
||||
在强监管或碳税预期升温的背景下,碳排放强度显著高于行业平均的公司将面临更大的合规成本或声誉风险,其估值可能受压;而低于平均的公司则可能获得政策红利或绿色溢价。两者间的差距会随着政策推进而逐步收敛。 |
||||
|
||||
[[实施方案]] |
||||
使用公司碳排放总量与营收的比率,计算其与行业平均值的偏离度(横截面z值)。通过ts_decay_linear算子对偏离度进行时间加权,赋予近期偏差更高权重。对偏离度持续扩大且处于高位的公司建立空头,对偏离度收窄或持续低位的公司建立多头。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
能否结合舆情数据,对“碳税立法进展”“ESG基金流入”等主题新闻进行情感分析,构建动态加权系数?当政策舆情升温时,放大该因子的权重分配,以捕捉事件催化下的收敛加速行情。 |
||||
|
||||
--- |
||||
|
||||
管理层薪酬激励错配因子 |
||||
|
||||
[[假设]] |
||||
管理层薪酬结构中若短期激励占比过高,可能导致决策短视,损害长期价值;而长期股权激励与公司长期业绩(如3年ROIC、客户留存率)挂钩较好的公司,更可能实现可持续增长。市场可能逐步识别并奖励这种治理优势。 |
||||
|
||||
[[实施方案]] |
||||
提取管理层薪酬明细字段,计算“长期激励占比”(股权激励价值/总薪酬)与“长期业绩挂钩强度”(薪酬条款中与3年以上业绩指标挂钩的比例)。使用ts_corr计算两者在过去五年的滚动相关性。对相关性高且持续提升的公司赋予正向阿尔法权重。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入股东治理数据(如机构股东持股比例、投票权集中度),作为调节变量。在治理监督较强的公司群体中,该因子的预测力可能更显著,可采用条件算子进行分层处理。 |
||||
|
||||
--- |
||||
|
||||
客户生命周期价值动量 |
||||
|
||||
[[假设]] |
||||
订阅制或高复购率行业(如SaaS、消费会员)中,客户生命周期价值(LTV)的加速增长或衰减,领先于营收变化。LTV增长动能强的公司,其未来现金流稳定性更高,应享有估值溢价;动能衰减则预示基本面临顶。 |
||||
|
||||
[[实施方案]] |
||||
基于客户新增数量、流失率、客单价等字段,通过ts_growth算子计算LTV的季度环比增长率。使用时序动量算子(如ts_rank对过去4个季度的增长率进行排序),对动量处于持续上升通道的公司建立多头仓位。采用行业中性化处理,仅在细分赛道(如企业级SaaS)内进行横截面比较。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
为降低噪声,可结合财报电话会文本分析,提取管理层对“客户健康度”“留存趋势”的定性评论,构建情绪调整因子。当量化LTV动量与文本情绪一致时,增强信号权重;当背离时,降低权重或屏蔽信号。 |
||||
|
||||
--- |
||||
|
||||
ESG争议事件修复效应 |
||||
[[假设]] |
||||
|
||||
ESG争议事件爆发后,市场往往存在短期过度反应,导致股价偏离内在价值。若公司在争议后及时采取有效整改措施(如完善合规体系、发布整改报告、引入第三方监督),其ESG表现将逐步修复,市场情绪也会随之回暖,股价大概率回归合理区间,此类公司可建立多头仓位;反之,对争议后无整改动作、ESG表现持续恶化的公司,应建立空头仓位以规避风险。 |
||||
|
||||
[[实施方案]] |
||||
|
||||
筛选过去12个月内发生ESG争议事件的标的,跟踪事件爆发后3个月、6个月、12个月的整改进展及ESG表现变化趋势。通过时序分析工具量化整改措施的落地成效,结合股价波动数据,构建“争议严重程度-整改效率-股价修复幅度”的关联指标,对整改成效显著且股价尚未充分修复的标的配置正向权重。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
|
||||
建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。帮我写一份类似这样的金融逻辑的描述, |
||||
如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 |
||||
输出的格式和我上面给你的例子一样, |
||||
但是要创新一个金融逻辑研究方向 |
||||
|
||||
先生成一份中文的, 格式如下: |
||||
|
||||
输出格式: |
||||
**名称** |
||||
... |
||||
**假设** |
||||
... |
||||
**实施方案** |
||||
... |
||||
**阿尔法因子优化建议** |
||||
|
||||
然后再将生成出来的内容, 翻译一份英文,格式和中文一样 |
||||
@ -0,0 +1,165 @@ |
||||
负债增值 |
||||
[[假设]] |
||||
负债公允价值上升可能意味着公司承担了高于预期的成本。这种情况可能恶化公司的财务健康状况,进而导致盈利能力下降或引发财务困境。 |
||||
[[实施方案]] |
||||
基于基本面数据,当负债公允价值在一年内出现上升时建立空头仓位,反之则建立多头仓位。 |
||||
[[实施优化建议]] |
||||
能否通过缩短观测周期(例如季度数据)来提升策略准确性? |
||||
|
||||
递延收入 |
||||
[[假设]] |
||||
递延收入较高的公司在未来确认收入时,往往会给市场带来超预期表现。 |
||||
[[实施方案]] |
||||
fnd6_drc字段代表递延收入。为提高数据字段覆盖度,需使用时序回填算子。将递延收入除以总资产以消除企业规模影响。 |
||||
[[实施优化建议]] |
||||
建议采用横截面算子代替原始比率值来确定股票权重。可运用分组算子对同类股票进行横向比较。 |
||||
|
||||
降低负债水平 |
||||
[[假设]] |
||||
对负债相较过往有所减少的公司建立多头仓位,反之对负债增加的公司建立空头仓位。 |
||||
[[实施方案]] |
||||
采用基础数据“负债”验证该假设,使用时序分位数算子分析该字段过去六个月的变化趋势。 |
||||
[[阿尔法因子优化建议]] |
||||
利用算子的驱动参数对负债数据进行分布形态转换。 |
||||
|
||||
财务杠杆效应 |
||||
[[假设]] |
||||
高负债资产比率的企业——若财务状况稳健、现金流充裕——常将债务作为战略工具推动扩张性增长。通过有效运用财务杠杆,这类公司将借贷资金投入高潜力项目,从而更可能获得超额收益。 |
||||
[[实施方案]] |
||||
采用"负债"与"资产"数据构建比率指标。 |
||||
[[阿尔法因子优化建议]] |
||||
该比率在不同行业间差异显著,是否值得采用替代性行业中性化处理方案? |
||||
|
||||
社交媒体效应 |
||||
[[假设]] |
||||
表现不佳的股票在社交媒体平台上通常会被更频繁地讨论,因此可能产生更高的相对情绪讨论量,建议考虑对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
若监测到情绪讨论量增加,则通过社交媒体数据字段施加负权重配置。 |
||||
|
||||
估值偏离波动空头策略 |
||||
[[假设]] |
||||
价值因子与动量因子在股票中通常不相关,若某只股票同时呈现高动量与高价值评分相关性,则表明其股价与内在价值存在偏离——据此我们对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
使用ts_corr()函数测算过去三年间估值评分与动量评分的相关性,通过ts_backfill()算子对前期缺失数据进行回填。 |
||||
[[阿尔法因子优化建议]] |
||||
建议运用分组算子与模型数据,在同类股票组内进行横向比较分析。 |
||||
|
||||
网络依存度 |
||||
[[假设]] |
||||
数据字段中较高的枢纽评分意味着企业客户拥有广泛业务连接,而较低评分则表明合作伙伴集中度较高。若企业的客户枢纽评分偏低,说明其客户合作伙伴较少,可能更依赖该企业。这对企业股票具有积极意义,意味着被替代风险较低,因此长期持有此类股票或是明智选择。 |
||||
[[实施方案]] |
||||
基于价量数据,对过去两年客户枢纽评分持续较低的企业股票建立多头仓位。 |
||||
[[阿尔法因子优化建议]] |
||||
在现有表达式基础上叠加横截面算子是否有助于提升策略表现? |
||||
|
||||
新闻驱动型波动率 |
||||
[[假设]] |
||||
新闻发布后股价波动剧烈的公司股票,往往受到市场情绪分化影响,可能引发剧烈波动行情。建议在近期新闻发布导致的极端波动阶段回避交易。 |
||||
[[实施方案]] |
||||
使用'news_session_range'新闻数据字段,通过'ts_backfill'算子提升数据覆盖度。结合'ts_arg_max'算子识别过去一季度内达到最大波动值的交易天数距离当前的时间间隔。该间隔天数越短,股票在阿尔法向量中的配置权重越低。 |
||||
[[阿尔法因子优化建议]] |
||||
近期新闻事件的影响时效有限,采用对接近零值数据快速调整阿尔法权重的算子(而非均等处理远期数据)能否提升策略表现?同时,使用交易条件限定算子是否有助于降低换手率? |
||||
|
||||
隐含波动率价差预测因子 |
||||
[[假设]] |
||||
若看涨期权未平仓量高于看跌期权未平仓量,基于隐含波动率价差强度指标,股票可能出现上涨行情;反之则可能下跌。 |
||||
[[实施方案]] |
||||
使用'trade_when'算子,以看涨-看跌期权未平仓量比值为条件。当该比值小于1时,基于隐含波动率价差强度指标建立股票多头仓位(采用期权数据)。 |
||||
[[阿尔法因子优化建议]] |
||||
基于自建分组(如历史波动率分组)对阿尔法因子进行自定义中性化处理,能否提升细分市场的策略表现?可结合分档算子或分层算子与排序算子实现自定义中性化。 |
||||
|
||||
|
||||
|
||||
研发转化滞后效应 |
||||
|
||||
[[假设]] |
||||
高研发投入的公司若未能及时将研发成果转化为商业产出,可能面临资本效率低下和未来增长动力不足的风险。这类公司通常具有较高的研发费用资本化率,但专利产出或新产品收入占比偏低,市场可能在一段时间后重新评估其研发效率,导致股价回调。 |
||||
|
||||
[[实施方案]] |
||||
基于研发费用资本化金额与专利授权数量(或新产品销售收入)构建“研发转化效率比”。使用时序滞后算子将专利数据滞后6-12个月以匹配研发投入周期,再通过ts_mean计算过去三年的平均转化效率。对效率持续偏低(后30%)的公司建立空头仓位,对效率显著提升(前30%)的公司建立多头仓位。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
不同行业的研发周期和转化模式差异巨大(如医药vs软件)。是否可采用行业动态分档,在各自行业队列内计算转化效率的分位数排名,以消除行业特性带来的偏差? |
||||
|
||||
供应链韧性溢价 |
||||
|
||||
--- |
||||
|
||||
[[假设]] |
||||
拥有多元化、抗冲击供应链的公司在面临全球性或区域性供应链中断时,表现出更强的营收稳定性和更快的恢复能力。这种韧性在危机期间被市场低估,但在多次冲击后会被逐步定价,形成长期超额收益。 |
||||
|
||||
[[实施方案]] |
||||
整合供应商集中度、关键物料替代源数量、物流枢纽分布广度等数据字段,构建“供应链韧性评分”。使用时序波动率算子计算该评分在过往供应链危机事件期(如疫情、地缘冲突)内的稳定性,并对稳定性高的公司赋予正向权重。采用ts_zscore对评分进行标准化,结合横截面排序动态调整仓位。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入事件驱动算子,仅在监测到供应链压力指数(如全球物流延误指数)突破阈值时触发该因子,以提升策略的敏锐度和稀疏性,降低非危机时期的无效换手。 |
||||
|
||||
--- |
||||
|
||||
碳排放强度收敛交易 |
||||
|
||||
[[假设]] |
||||
在强监管或碳税预期升温的背景下,碳排放强度显著高于行业平均的公司将面临更大的合规成本或声誉风险,其估值可能受压;而低于平均的公司则可能获得政策红利或绿色溢价。两者间的差距会随着政策推进而逐步收敛。 |
||||
|
||||
[[实施方案]] |
||||
使用公司碳排放总量与营收的比率,计算其与行业平均值的偏离度(横截面z值)。通过ts_decay_linear算子对偏离度进行时间加权,赋予近期偏差更高权重。对偏离度持续扩大且处于高位的公司建立空头,对偏离度收窄或持续低位的公司建立多头。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
能否结合舆情数据,对“碳税立法进展”“ESG基金流入”等主题新闻进行情感分析,构建动态加权系数?当政策舆情升温时,放大该因子的权重分配,以捕捉事件催化下的收敛加速行情。 |
||||
|
||||
--- |
||||
|
||||
管理层薪酬激励错配因子 |
||||
|
||||
[[假设]] |
||||
管理层薪酬结构中若短期激励占比过高,可能导致决策短视,损害长期价值;而长期股权激励与公司长期业绩(如3年ROIC、客户留存率)挂钩较好的公司,更可能实现可持续增长。市场可能逐步识别并奖励这种治理优势。 |
||||
|
||||
[[实施方案]] |
||||
提取管理层薪酬明细字段,计算“长期激励占比”(股权激励价值/总薪酬)与“长期业绩挂钩强度”(薪酬条款中与3年以上业绩指标挂钩的比例)。使用ts_corr计算两者在过去五年的滚动相关性。对相关性高且持续提升的公司赋予正向阿尔法权重。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入股东治理数据(如机构股东持股比例、投票权集中度),作为调节变量。在治理监督较强的公司群体中,该因子的预测力可能更显著,可采用条件算子进行分层处理。 |
||||
|
||||
--- |
||||
|
||||
客户生命周期价值动量 |
||||
|
||||
[[假设]] |
||||
订阅制或高复购率行业(如SaaS、消费会员)中,客户生命周期价值(LTV)的加速增长或衰减,领先于营收变化。LTV增长动能强的公司,其未来现金流稳定性更高,应享有估值溢价;动能衰减则预示基本面临顶。 |
||||
|
||||
[[实施方案]] |
||||
基于客户新增数量、流失率、客单价等字段,通过ts_growth算子计算LTV的季度环比增长率。使用时序动量算子(如ts_rank对过去4个季度的增长率进行排序),对动量处于持续上升通道的公司建立多头仓位。采用行业中性化处理,仅在细分赛道(如企业级SaaS)内进行横截面比较。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
为降低噪声,可结合财报电话会文本分析,提取管理层对“客户健康度”“留存趋势”的定性评论,构建情绪调整因子。当量化LTV动量与文本情绪一致时,增强信号权重;当背离时,降低权重或屏蔽信号。 |
||||
|
||||
--- |
||||
|
||||
ESG争议事件修复效应 |
||||
[[假设]] |
||||
|
||||
ESG争议事件爆发后,市场往往存在短期过度反应,导致股价偏离内在价值。若公司在争议后及时采取有效整改措施(如完善合规体系、发布整改报告、引入第三方监督),其ESG表现将逐步修复,市场情绪也会随之回暖,股价大概率回归合理区间,此类公司可建立多头仓位;反之,对争议后无整改动作、ESG表现持续恶化的公司,应建立空头仓位以规避风险。 |
||||
|
||||
[[实施方案]] |
||||
|
||||
筛选过去12个月内发生ESG争议事件的标的,跟踪事件爆发后3个月、6个月、12个月的整改进展及ESG表现变化趋势。通过时序分析工具量化整改措施的落地成效,结合股价波动数据,构建“争议严重程度-整改效率-股价修复幅度”的关联指标,对整改成效显著且股价尚未充分修复的标的配置正向权重。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
|
||||
建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。帮我写一份类似这样的金融逻辑的描述, |
||||
如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 |
||||
输出的格式和我上面给你的例子一样, |
||||
但是要创新一个金融逻辑研究方向 |
||||
|
||||
先生成一份中文的, 格式如下: |
||||
|
||||
输出格式: |
||||
**名称** |
||||
... |
||||
**假设** |
||||
... |
||||
**实施方案** |
||||
... |
||||
**阿尔法因子优化建议** |
||||
|
||||
然后再将生成出来的内容, 翻译一份英文,格式和中文一样 |
||||
@ -0,0 +1,165 @@ |
||||
负债增值 |
||||
[[假设]] |
||||
负债公允价值上升可能意味着公司承担了高于预期的成本。这种情况可能恶化公司的财务健康状况,进而导致盈利能力下降或引发财务困境。 |
||||
[[实施方案]] |
||||
基于基本面数据,当负债公允价值在一年内出现上升时建立空头仓位,反之则建立多头仓位。 |
||||
[[实施优化建议]] |
||||
能否通过缩短观测周期(例如季度数据)来提升策略准确性? |
||||
|
||||
递延收入 |
||||
[[假设]] |
||||
递延收入较高的公司在未来确认收入时,往往会给市场带来超预期表现。 |
||||
[[实施方案]] |
||||
fnd6_drc字段代表递延收入。为提高数据字段覆盖度,需使用时序回填算子。将递延收入除以总资产以消除企业规模影响。 |
||||
[[实施优化建议]] |
||||
建议采用横截面算子代替原始比率值来确定股票权重。可运用分组算子对同类股票进行横向比较。 |
||||
|
||||
降低负债水平 |
||||
[[假设]] |
||||
对负债相较过往有所减少的公司建立多头仓位,反之对负债增加的公司建立空头仓位。 |
||||
[[实施方案]] |
||||
采用基础数据“负债”验证该假设,使用时序分位数算子分析该字段过去六个月的变化趋势。 |
||||
[[阿尔法因子优化建议]] |
||||
利用算子的驱动参数对负债数据进行分布形态转换。 |
||||
|
||||
财务杠杆效应 |
||||
[[假设]] |
||||
高负债资产比率的企业——若财务状况稳健、现金流充裕——常将债务作为战略工具推动扩张性增长。通过有效运用财务杠杆,这类公司将借贷资金投入高潜力项目,从而更可能获得超额收益。 |
||||
[[实施方案]] |
||||
采用"负债"与"资产"数据构建比率指标。 |
||||
[[阿尔法因子优化建议]] |
||||
该比率在不同行业间差异显著,是否值得采用替代性行业中性化处理方案? |
||||
|
||||
社交媒体效应 |
||||
[[假设]] |
||||
表现不佳的股票在社交媒体平台上通常会被更频繁地讨论,因此可能产生更高的相对情绪讨论量,建议考虑对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
若监测到情绪讨论量增加,则通过社交媒体数据字段施加负权重配置。 |
||||
|
||||
估值偏离波动空头策略 |
||||
[[假设]] |
||||
价值因子与动量因子在股票中通常不相关,若某只股票同时呈现高动量与高价值评分相关性,则表明其股价与内在价值存在偏离——据此我们对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
使用ts_corr()函数测算过去三年间估值评分与动量评分的相关性,通过ts_backfill()算子对前期缺失数据进行回填。 |
||||
[[阿尔法因子优化建议]] |
||||
建议运用分组算子与模型数据,在同类股票组内进行横向比较分析。 |
||||
|
||||
网络依存度 |
||||
[[假设]] |
||||
数据字段中较高的枢纽评分意味着企业客户拥有广泛业务连接,而较低评分则表明合作伙伴集中度较高。若企业的客户枢纽评分偏低,说明其客户合作伙伴较少,可能更依赖该企业。这对企业股票具有积极意义,意味着被替代风险较低,因此长期持有此类股票或是明智选择。 |
||||
[[实施方案]] |
||||
基于价量数据,对过去两年客户枢纽评分持续较低的企业股票建立多头仓位。 |
||||
[[阿尔法因子优化建议]] |
||||
在现有表达式基础上叠加横截面算子是否有助于提升策略表现? |
||||
|
||||
新闻驱动型波动率 |
||||
[[假设]] |
||||
新闻发布后股价波动剧烈的公司股票,往往受到市场情绪分化影响,可能引发剧烈波动行情。建议在近期新闻发布导致的极端波动阶段回避交易。 |
||||
[[实施方案]] |
||||
使用'news_session_range'新闻数据字段,通过'ts_backfill'算子提升数据覆盖度。结合'ts_arg_max'算子识别过去一季度内达到最大波动值的交易天数距离当前的时间间隔。该间隔天数越短,股票在阿尔法向量中的配置权重越低。 |
||||
[[阿尔法因子优化建议]] |
||||
近期新闻事件的影响时效有限,采用对接近零值数据快速调整阿尔法权重的算子(而非均等处理远期数据)能否提升策略表现?同时,使用交易条件限定算子是否有助于降低换手率? |
||||
|
||||
隐含波动率价差预测因子 |
||||
[[假设]] |
||||
若看涨期权未平仓量高于看跌期权未平仓量,基于隐含波动率价差强度指标,股票可能出现上涨行情;反之则可能下跌。 |
||||
[[实施方案]] |
||||
使用'trade_when'算子,以看涨-看跌期权未平仓量比值为条件。当该比值小于1时,基于隐含波动率价差强度指标建立股票多头仓位(采用期权数据)。 |
||||
[[阿尔法因子优化建议]] |
||||
基于自建分组(如历史波动率分组)对阿尔法因子进行自定义中性化处理,能否提升细分市场的策略表现?可结合分档算子或分层算子与排序算子实现自定义中性化。 |
||||
|
||||
|
||||
|
||||
研发转化滞后效应 |
||||
|
||||
[[假设]] |
||||
高研发投入的公司若未能及时将研发成果转化为商业产出,可能面临资本效率低下和未来增长动力不足的风险。这类公司通常具有较高的研发费用资本化率,但专利产出或新产品收入占比偏低,市场可能在一段时间后重新评估其研发效率,导致股价回调。 |
||||
|
||||
[[实施方案]] |
||||
基于研发费用资本化金额与专利授权数量(或新产品销售收入)构建“研发转化效率比”。使用时序滞后算子将专利数据滞后6-12个月以匹配研发投入周期,再通过ts_mean计算过去三年的平均转化效率。对效率持续偏低(后30%)的公司建立空头仓位,对效率显著提升(前30%)的公司建立多头仓位。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
不同行业的研发周期和转化模式差异巨大(如医药vs软件)。是否可采用行业动态分档,在各自行业队列内计算转化效率的分位数排名,以消除行业特性带来的偏差? |
||||
|
||||
供应链韧性溢价 |
||||
|
||||
--- |
||||
|
||||
[[假设]] |
||||
拥有多元化、抗冲击供应链的公司在面临全球性或区域性供应链中断时,表现出更强的营收稳定性和更快的恢复能力。这种韧性在危机期间被市场低估,但在多次冲击后会被逐步定价,形成长期超额收益。 |
||||
|
||||
[[实施方案]] |
||||
整合供应商集中度、关键物料替代源数量、物流枢纽分布广度等数据字段,构建“供应链韧性评分”。使用时序波动率算子计算该评分在过往供应链危机事件期(如疫情、地缘冲突)内的稳定性,并对稳定性高的公司赋予正向权重。采用ts_zscore对评分进行标准化,结合横截面排序动态调整仓位。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入事件驱动算子,仅在监测到供应链压力指数(如全球物流延误指数)突破阈值时触发该因子,以提升策略的敏锐度和稀疏性,降低非危机时期的无效换手。 |
||||
|
||||
--- |
||||
|
||||
碳排放强度收敛交易 |
||||
|
||||
[[假设]] |
||||
在强监管或碳税预期升温的背景下,碳排放强度显著高于行业平均的公司将面临更大的合规成本或声誉风险,其估值可能受压;而低于平均的公司则可能获得政策红利或绿色溢价。两者间的差距会随着政策推进而逐步收敛。 |
||||
|
||||
[[实施方案]] |
||||
使用公司碳排放总量与营收的比率,计算其与行业平均值的偏离度(横截面z值)。通过ts_decay_linear算子对偏离度进行时间加权,赋予近期偏差更高权重。对偏离度持续扩大且处于高位的公司建立空头,对偏离度收窄或持续低位的公司建立多头。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
能否结合舆情数据,对“碳税立法进展”“ESG基金流入”等主题新闻进行情感分析,构建动态加权系数?当政策舆情升温时,放大该因子的权重分配,以捕捉事件催化下的收敛加速行情。 |
||||
|
||||
--- |
||||
|
||||
管理层薪酬激励错配因子 |
||||
|
||||
[[假设]] |
||||
管理层薪酬结构中若短期激励占比过高,可能导致决策短视,损害长期价值;而长期股权激励与公司长期业绩(如3年ROIC、客户留存率)挂钩较好的公司,更可能实现可持续增长。市场可能逐步识别并奖励这种治理优势。 |
||||
|
||||
[[实施方案]] |
||||
提取管理层薪酬明细字段,计算“长期激励占比”(股权激励价值/总薪酬)与“长期业绩挂钩强度”(薪酬条款中与3年以上业绩指标挂钩的比例)。使用ts_corr计算两者在过去五年的滚动相关性。对相关性高且持续提升的公司赋予正向阿尔法权重。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入股东治理数据(如机构股东持股比例、投票权集中度),作为调节变量。在治理监督较强的公司群体中,该因子的预测力可能更显著,可采用条件算子进行分层处理。 |
||||
|
||||
--- |
||||
|
||||
客户生命周期价值动量 |
||||
|
||||
[[假设]] |
||||
订阅制或高复购率行业(如SaaS、消费会员)中,客户生命周期价值(LTV)的加速增长或衰减,领先于营收变化。LTV增长动能强的公司,其未来现金流稳定性更高,应享有估值溢价;动能衰减则预示基本面临顶。 |
||||
|
||||
[[实施方案]] |
||||
基于客户新增数量、流失率、客单价等字段,通过ts_growth算子计算LTV的季度环比增长率。使用时序动量算子(如ts_rank对过去4个季度的增长率进行排序),对动量处于持续上升通道的公司建立多头仓位。采用行业中性化处理,仅在细分赛道(如企业级SaaS)内进行横截面比较。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
为降低噪声,可结合财报电话会文本分析,提取管理层对“客户健康度”“留存趋势”的定性评论,构建情绪调整因子。当量化LTV动量与文本情绪一致时,增强信号权重;当背离时,降低权重或屏蔽信号。 |
||||
|
||||
--- |
||||
|
||||
ESG争议事件修复效应 |
||||
[[假设]] |
||||
|
||||
ESG争议事件爆发后,市场往往存在短期过度反应,导致股价偏离内在价值。若公司在争议后及时采取有效整改措施(如完善合规体系、发布整改报告、引入第三方监督),其ESG表现将逐步修复,市场情绪也会随之回暖,股价大概率回归合理区间,此类公司可建立多头仓位;反之,对争议后无整改动作、ESG表现持续恶化的公司,应建立空头仓位以规避风险。 |
||||
|
||||
[[实施方案]] |
||||
|
||||
筛选过去12个月内发生ESG争议事件的标的,跟踪事件爆发后3个月、6个月、12个月的整改进展及ESG表现变化趋势。通过时序分析工具量化整改措施的落地成效,结合股价波动数据,构建“争议严重程度-整改效率-股价修复幅度”的关联指标,对整改成效显著且股价尚未充分修复的标的配置正向权重。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
|
||||
建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。帮我写一份类似这样的金融逻辑的描述, |
||||
如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 |
||||
输出的格式和我上面给你的例子一样, |
||||
但是要创新一个金融逻辑研究方向 |
||||
|
||||
先生成一份中文的, 格式如下: |
||||
|
||||
输出格式: |
||||
**名称** |
||||
... |
||||
**假设** |
||||
... |
||||
**实施方案** |
||||
... |
||||
**阿尔法因子优化建议** |
||||
|
||||
然后再将生成出来的内容, 翻译一份英文,格式和中文一样 |
||||
@ -0,0 +1,165 @@ |
||||
负债增值 |
||||
[[假设]] |
||||
负债公允价值上升可能意味着公司承担了高于预期的成本。这种情况可能恶化公司的财务健康状况,进而导致盈利能力下降或引发财务困境。 |
||||
[[实施方案]] |
||||
基于基本面数据,当负债公允价值在一年内出现上升时建立空头仓位,反之则建立多头仓位。 |
||||
[[实施优化建议]] |
||||
能否通过缩短观测周期(例如季度数据)来提升策略准确性? |
||||
|
||||
递延收入 |
||||
[[假设]] |
||||
递延收入较高的公司在未来确认收入时,往往会给市场带来超预期表现。 |
||||
[[实施方案]] |
||||
fnd6_drc字段代表递延收入。为提高数据字段覆盖度,需使用时序回填算子。将递延收入除以总资产以消除企业规模影响。 |
||||
[[实施优化建议]] |
||||
建议采用横截面算子代替原始比率值来确定股票权重。可运用分组算子对同类股票进行横向比较。 |
||||
|
||||
降低负债水平 |
||||
[[假设]] |
||||
对负债相较过往有所减少的公司建立多头仓位,反之对负债增加的公司建立空头仓位。 |
||||
[[实施方案]] |
||||
采用基础数据“负债”验证该假设,使用时序分位数算子分析该字段过去六个月的变化趋势。 |
||||
[[阿尔法因子优化建议]] |
||||
利用算子的驱动参数对负债数据进行分布形态转换。 |
||||
|
||||
财务杠杆效应 |
||||
[[假设]] |
||||
高负债资产比率的企业——若财务状况稳健、现金流充裕——常将债务作为战略工具推动扩张性增长。通过有效运用财务杠杆,这类公司将借贷资金投入高潜力项目,从而更可能获得超额收益。 |
||||
[[实施方案]] |
||||
采用"负债"与"资产"数据构建比率指标。 |
||||
[[阿尔法因子优化建议]] |
||||
该比率在不同行业间差异显著,是否值得采用替代性行业中性化处理方案? |
||||
|
||||
社交媒体效应 |
||||
[[假设]] |
||||
表现不佳的股票在社交媒体平台上通常会被更频繁地讨论,因此可能产生更高的相对情绪讨论量,建议考虑对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
若监测到情绪讨论量增加,则通过社交媒体数据字段施加负权重配置。 |
||||
|
||||
估值偏离波动空头策略 |
||||
[[假设]] |
||||
价值因子与动量因子在股票中通常不相关,若某只股票同时呈现高动量与高价值评分相关性,则表明其股价与内在价值存在偏离——据此我们对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
使用ts_corr()函数测算过去三年间估值评分与动量评分的相关性,通过ts_backfill()算子对前期缺失数据进行回填。 |
||||
[[阿尔法因子优化建议]] |
||||
建议运用分组算子与模型数据,在同类股票组内进行横向比较分析。 |
||||
|
||||
网络依存度 |
||||
[[假设]] |
||||
数据字段中较高的枢纽评分意味着企业客户拥有广泛业务连接,而较低评分则表明合作伙伴集中度较高。若企业的客户枢纽评分偏低,说明其客户合作伙伴较少,可能更依赖该企业。这对企业股票具有积极意义,意味着被替代风险较低,因此长期持有此类股票或是明智选择。 |
||||
[[实施方案]] |
||||
基于价量数据,对过去两年客户枢纽评分持续较低的企业股票建立多头仓位。 |
||||
[[阿尔法因子优化建议]] |
||||
在现有表达式基础上叠加横截面算子是否有助于提升策略表现? |
||||
|
||||
新闻驱动型波动率 |
||||
[[假设]] |
||||
新闻发布后股价波动剧烈的公司股票,往往受到市场情绪分化影响,可能引发剧烈波动行情。建议在近期新闻发布导致的极端波动阶段回避交易。 |
||||
[[实施方案]] |
||||
使用'news_session_range'新闻数据字段,通过'ts_backfill'算子提升数据覆盖度。结合'ts_arg_max'算子识别过去一季度内达到最大波动值的交易天数距离当前的时间间隔。该间隔天数越短,股票在阿尔法向量中的配置权重越低。 |
||||
[[阿尔法因子优化建议]] |
||||
近期新闻事件的影响时效有限,采用对接近零值数据快速调整阿尔法权重的算子(而非均等处理远期数据)能否提升策略表现?同时,使用交易条件限定算子是否有助于降低换手率? |
||||
|
||||
隐含波动率价差预测因子 |
||||
[[假设]] |
||||
若看涨期权未平仓量高于看跌期权未平仓量,基于隐含波动率价差强度指标,股票可能出现上涨行情;反之则可能下跌。 |
||||
[[实施方案]] |
||||
使用'trade_when'算子,以看涨-看跌期权未平仓量比值为条件。当该比值小于1时,基于隐含波动率价差强度指标建立股票多头仓位(采用期权数据)。 |
||||
[[阿尔法因子优化建议]] |
||||
基于自建分组(如历史波动率分组)对阿尔法因子进行自定义中性化处理,能否提升细分市场的策略表现?可结合分档算子或分层算子与排序算子实现自定义中性化。 |
||||
|
||||
|
||||
|
||||
研发转化滞后效应 |
||||
|
||||
[[假设]] |
||||
高研发投入的公司若未能及时将研发成果转化为商业产出,可能面临资本效率低下和未来增长动力不足的风险。这类公司通常具有较高的研发费用资本化率,但专利产出或新产品收入占比偏低,市场可能在一段时间后重新评估其研发效率,导致股价回调。 |
||||
|
||||
[[实施方案]] |
||||
基于研发费用资本化金额与专利授权数量(或新产品销售收入)构建“研发转化效率比”。使用时序滞后算子将专利数据滞后6-12个月以匹配研发投入周期,再通过ts_mean计算过去三年的平均转化效率。对效率持续偏低(后30%)的公司建立空头仓位,对效率显著提升(前30%)的公司建立多头仓位。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
不同行业的研发周期和转化模式差异巨大(如医药vs软件)。是否可采用行业动态分档,在各自行业队列内计算转化效率的分位数排名,以消除行业特性带来的偏差? |
||||
|
||||
供应链韧性溢价 |
||||
|
||||
--- |
||||
|
||||
[[假设]] |
||||
拥有多元化、抗冲击供应链的公司在面临全球性或区域性供应链中断时,表现出更强的营收稳定性和更快的恢复能力。这种韧性在危机期间被市场低估,但在多次冲击后会被逐步定价,形成长期超额收益。 |
||||
|
||||
[[实施方案]] |
||||
整合供应商集中度、关键物料替代源数量、物流枢纽分布广度等数据字段,构建“供应链韧性评分”。使用时序波动率算子计算该评分在过往供应链危机事件期(如疫情、地缘冲突)内的稳定性,并对稳定性高的公司赋予正向权重。采用ts_zscore对评分进行标准化,结合横截面排序动态调整仓位。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入事件驱动算子,仅在监测到供应链压力指数(如全球物流延误指数)突破阈值时触发该因子,以提升策略的敏锐度和稀疏性,降低非危机时期的无效换手。 |
||||
|
||||
--- |
||||
|
||||
碳排放强度收敛交易 |
||||
|
||||
[[假设]] |
||||
在强监管或碳税预期升温的背景下,碳排放强度显著高于行业平均的公司将面临更大的合规成本或声誉风险,其估值可能受压;而低于平均的公司则可能获得政策红利或绿色溢价。两者间的差距会随着政策推进而逐步收敛。 |
||||
|
||||
[[实施方案]] |
||||
使用公司碳排放总量与营收的比率,计算其与行业平均值的偏离度(横截面z值)。通过ts_decay_linear算子对偏离度进行时间加权,赋予近期偏差更高权重。对偏离度持续扩大且处于高位的公司建立空头,对偏离度收窄或持续低位的公司建立多头。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
能否结合舆情数据,对“碳税立法进展”“ESG基金流入”等主题新闻进行情感分析,构建动态加权系数?当政策舆情升温时,放大该因子的权重分配,以捕捉事件催化下的收敛加速行情。 |
||||
|
||||
--- |
||||
|
||||
管理层薪酬激励错配因子 |
||||
|
||||
[[假设]] |
||||
管理层薪酬结构中若短期激励占比过高,可能导致决策短视,损害长期价值;而长期股权激励与公司长期业绩(如3年ROIC、客户留存率)挂钩较好的公司,更可能实现可持续增长。市场可能逐步识别并奖励这种治理优势。 |
||||
|
||||
[[实施方案]] |
||||
提取管理层薪酬明细字段,计算“长期激励占比”(股权激励价值/总薪酬)与“长期业绩挂钩强度”(薪酬条款中与3年以上业绩指标挂钩的比例)。使用ts_corr计算两者在过去五年的滚动相关性。对相关性高且持续提升的公司赋予正向阿尔法权重。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入股东治理数据(如机构股东持股比例、投票权集中度),作为调节变量。在治理监督较强的公司群体中,该因子的预测力可能更显著,可采用条件算子进行分层处理。 |
||||
|
||||
--- |
||||
|
||||
客户生命周期价值动量 |
||||
|
||||
[[假设]] |
||||
订阅制或高复购率行业(如SaaS、消费会员)中,客户生命周期价值(LTV)的加速增长或衰减,领先于营收变化。LTV增长动能强的公司,其未来现金流稳定性更高,应享有估值溢价;动能衰减则预示基本面临顶。 |
||||
|
||||
[[实施方案]] |
||||
基于客户新增数量、流失率、客单价等字段,通过ts_growth算子计算LTV的季度环比增长率。使用时序动量算子(如ts_rank对过去4个季度的增长率进行排序),对动量处于持续上升通道的公司建立多头仓位。采用行业中性化处理,仅在细分赛道(如企业级SaaS)内进行横截面比较。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
为降低噪声,可结合财报电话会文本分析,提取管理层对“客户健康度”“留存趋势”的定性评论,构建情绪调整因子。当量化LTV动量与文本情绪一致时,增强信号权重;当背离时,降低权重或屏蔽信号。 |
||||
|
||||
--- |
||||
|
||||
ESG争议事件修复效应 |
||||
[[假设]] |
||||
|
||||
ESG争议事件爆发后,市场往往存在短期过度反应,导致股价偏离内在价值。若公司在争议后及时采取有效整改措施(如完善合规体系、发布整改报告、引入第三方监督),其ESG表现将逐步修复,市场情绪也会随之回暖,股价大概率回归合理区间,此类公司可建立多头仓位;反之,对争议后无整改动作、ESG表现持续恶化的公司,应建立空头仓位以规避风险。 |
||||
|
||||
[[实施方案]] |
||||
|
||||
筛选过去12个月内发生ESG争议事件的标的,跟踪事件爆发后3个月、6个月、12个月的整改进展及ESG表现变化趋势。通过时序分析工具量化整改措施的落地成效,结合股价波动数据,构建“争议严重程度-整改效率-股价修复幅度”的关联指标,对整改成效显著且股价尚未充分修复的标的配置正向权重。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
|
||||
建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。帮我写一份类似这样的金融逻辑的描述, |
||||
如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 |
||||
输出的格式和我上面给你的例子一样, |
||||
但是要创新一个金融逻辑研究方向 |
||||
|
||||
先生成一份中文的, 格式如下: |
||||
|
||||
输出格式: |
||||
**名称** |
||||
... |
||||
**假设** |
||||
... |
||||
**实施方案** |
||||
... |
||||
**阿尔法因子优化建议** |
||||
|
||||
然后再将生成出来的内容, 翻译一份英文,格式和中文一样 |
||||
@ -0,0 +1,166 @@ |
||||
你是研究alpha量化因子的专业顾问, 你现在要创建一个符合金融直觉的, 创新的金融逻辑, 以下是我之前写的, 可以作为参考, 但不禁止抄袭, 写一个新的金融逻辑 |
||||
负债增值 |
||||
[[假设]] |
||||
负债公允价值上升可能意味着公司承担了高于预期的成本。这种情况可能恶化公司的财务健康状况,进而导致盈利能力下降或引发财务困境。 |
||||
[[实施方案]] |
||||
基于基本面数据,当负债公允价值在一年内出现上升时建立空头仓位,反之则建立多头仓位。 |
||||
[[实施优化建议]] |
||||
能否通过缩短观测周期(例如季度数据)来提升策略准确性? |
||||
|
||||
递延收入 |
||||
[[假设]] |
||||
递延收入较高的公司在未来确认收入时,往往会给市场带来超预期表现。 |
||||
[[实施方案]] |
||||
fnd6_drc字段代表递延收入。为提高数据字段覆盖度,需使用时序回填算子。将递延收入除以总资产以消除企业规模影响。 |
||||
[[实施优化建议]] |
||||
建议采用横截面算子代替原始比率值来确定股票权重。可运用分组算子对同类股票进行横向比较。 |
||||
|
||||
降低负债水平 |
||||
[[假设]] |
||||
对负债相较过往有所减少的公司建立多头仓位,反之对负债增加的公司建立空头仓位。 |
||||
[[实施方案]] |
||||
采用基础数据“负债”验证该假设,使用时序分位数算子分析该字段过去六个月的变化趋势。 |
||||
[[阿尔法因子优化建议]] |
||||
利用算子的驱动参数对负债数据进行分布形态转换。 |
||||
|
||||
财务杠杆效应 |
||||
[[假设]] |
||||
高负债资产比率的企业——若财务状况稳健、现金流充裕——常将债务作为战略工具推动扩张性增长。通过有效运用财务杠杆,这类公司将借贷资金投入高潜力项目,从而更可能获得超额收益。 |
||||
[[实施方案]] |
||||
采用"负债"与"资产"数据构建比率指标。 |
||||
[[阿尔法因子优化建议]] |
||||
该比率在不同行业间差异显著,是否值得采用替代性行业中性化处理方案? |
||||
|
||||
社交媒体效应 |
||||
[[假设]] |
||||
表现不佳的股票在社交媒体平台上通常会被更频繁地讨论,因此可能产生更高的相对情绪讨论量,建议考虑对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
若监测到情绪讨论量增加,则通过社交媒体数据字段施加负权重配置。 |
||||
|
||||
估值偏离波动空头策略 |
||||
[[假设]] |
||||
价值因子与动量因子在股票中通常不相关,若某只股票同时呈现高动量与高价值评分相关性,则表明其股价与内在价值存在偏离——据此我们对这类股票建立空头仓位。 |
||||
[[实施方案]] |
||||
使用ts_corr()函数测算过去三年间估值评分与动量评分的相关性,通过ts_backfill()算子对前期缺失数据进行回填。 |
||||
[[阿尔法因子优化建议]] |
||||
建议运用分组算子与模型数据,在同类股票组内进行横向比较分析。 |
||||
|
||||
网络依存度 |
||||
[[假设]] |
||||
数据字段中较高的枢纽评分意味着企业客户拥有广泛业务连接,而较低评分则表明合作伙伴集中度较高。若企业的客户枢纽评分偏低,说明其客户合作伙伴较少,可能更依赖该企业。这对企业股票具有积极意义,意味着被替代风险较低,因此长期持有此类股票或是明智选择。 |
||||
[[实施方案]] |
||||
基于价量数据,对过去两年客户枢纽评分持续较低的企业股票建立多头仓位。 |
||||
[[阿尔法因子优化建议]] |
||||
在现有表达式基础上叠加横截面算子是否有助于提升策略表现? |
||||
|
||||
新闻驱动型波动率 |
||||
[[假设]] |
||||
新闻发布后股价波动剧烈的公司股票,往往受到市场情绪分化影响,可能引发剧烈波动行情。建议在近期新闻发布导致的极端波动阶段回避交易。 |
||||
[[实施方案]] |
||||
使用'news_session_range'新闻数据字段,通过'ts_backfill'算子提升数据覆盖度。结合'ts_arg_max'算子识别过去一季度内达到最大波动值的交易天数距离当前的时间间隔。该间隔天数越短,股票在阿尔法向量中的配置权重越低。 |
||||
[[阿尔法因子优化建议]] |
||||
近期新闻事件的影响时效有限,采用对接近零值数据快速调整阿尔法权重的算子(而非均等处理远期数据)能否提升策略表现?同时,使用交易条件限定算子是否有助于降低换手率? |
||||
|
||||
隐含波动率价差预测因子 |
||||
[[假设]] |
||||
若看涨期权未平仓量高于看跌期权未平仓量,基于隐含波动率价差强度指标,股票可能出现上涨行情;反之则可能下跌。 |
||||
[[实施方案]] |
||||
使用'trade_when'算子,以看涨-看跌期权未平仓量比值为条件。当该比值小于1时,基于隐含波动率价差强度指标建立股票多头仓位(采用期权数据)。 |
||||
[[阿尔法因子优化建议]] |
||||
基于自建分组(如历史波动率分组)对阿尔法因子进行自定义中性化处理,能否提升细分市场的策略表现?可结合分档算子或分层算子与排序算子实现自定义中性化。 |
||||
|
||||
|
||||
|
||||
研发转化滞后效应 |
||||
|
||||
[[假设]] |
||||
高研发投入的公司若未能及时将研发成果转化为商业产出,可能面临资本效率低下和未来增长动力不足的风险。这类公司通常具有较高的研发费用资本化率,但专利产出或新产品收入占比偏低,市场可能在一段时间后重新评估其研发效率,导致股价回调。 |
||||
|
||||
[[实施方案]] |
||||
基于研发费用资本化金额与专利授权数量(或新产品销售收入)构建“研发转化效率比”。使用时序滞后算子将专利数据滞后6-12个月以匹配研发投入周期,再通过ts_mean计算过去三年的平均转化效率。对效率持续偏低(后30%)的公司建立空头仓位,对效率显著提升(前30%)的公司建立多头仓位。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
不同行业的研发周期和转化模式差异巨大(如医药vs软件)。是否可采用行业动态分档,在各自行业队列内计算转化效率的分位数排名,以消除行业特性带来的偏差? |
||||
|
||||
供应链韧性溢价 |
||||
|
||||
--- |
||||
|
||||
[[假设]] |
||||
拥有多元化、抗冲击供应链的公司在面临全球性或区域性供应链中断时,表现出更强的营收稳定性和更快的恢复能力。这种韧性在危机期间被市场低估,但在多次冲击后会被逐步定价,形成长期超额收益。 |
||||
|
||||
[[实施方案]] |
||||
整合供应商集中度、关键物料替代源数量、物流枢纽分布广度等数据字段,构建“供应链韧性评分”。使用时序波动率算子计算该评分在过往供应链危机事件期(如疫情、地缘冲突)内的稳定性,并对稳定性高的公司赋予正向权重。采用ts_zscore对评分进行标准化,结合横截面排序动态调整仓位。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入事件驱动算子,仅在监测到供应链压力指数(如全球物流延误指数)突破阈值时触发该因子,以提升策略的敏锐度和稀疏性,降低非危机时期的无效换手。 |
||||
|
||||
--- |
||||
|
||||
碳排放强度收敛交易 |
||||
|
||||
[[假设]] |
||||
在强监管或碳税预期升温的背景下,碳排放强度显著高于行业平均的公司将面临更大的合规成本或声誉风险,其估值可能受压;而低于平均的公司则可能获得政策红利或绿色溢价。两者间的差距会随着政策推进而逐步收敛。 |
||||
|
||||
[[实施方案]] |
||||
使用公司碳排放总量与营收的比率,计算其与行业平均值的偏离度(横截面z值)。通过ts_decay_linear算子对偏离度进行时间加权,赋予近期偏差更高权重。对偏离度持续扩大且处于高位的公司建立空头,对偏离度收窄或持续低位的公司建立多头。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
能否结合舆情数据,对“碳税立法进展”“ESG基金流入”等主题新闻进行情感分析,构建动态加权系数?当政策舆情升温时,放大该因子的权重分配,以捕捉事件催化下的收敛加速行情。 |
||||
|
||||
--- |
||||
|
||||
管理层薪酬激励错配因子 |
||||
|
||||
[[假设]] |
||||
管理层薪酬结构中若短期激励占比过高,可能导致决策短视,损害长期价值;而长期股权激励与公司长期业绩(如3年ROIC、客户留存率)挂钩较好的公司,更可能实现可持续增长。市场可能逐步识别并奖励这种治理优势。 |
||||
|
||||
[[实施方案]] |
||||
提取管理层薪酬明细字段,计算“长期激励占比”(股权激励价值/总薪酬)与“长期业绩挂钩强度”(薪酬条款中与3年以上业绩指标挂钩的比例)。使用ts_corr计算两者在过去五年的滚动相关性。对相关性高且持续提升的公司赋予正向阿尔法权重。 |
||||
|
||||
[[实施优化建议]] |
||||
建议引入股东治理数据(如机构股东持股比例、投票权集中度),作为调节变量。在治理监督较强的公司群体中,该因子的预测力可能更显著,可采用条件算子进行分层处理。 |
||||
|
||||
--- |
||||
|
||||
客户生命周期价值动量 |
||||
|
||||
[[假设]] |
||||
订阅制或高复购率行业(如SaaS、消费会员)中,客户生命周期价值(LTV)的加速增长或衰减,领先于营收变化。LTV增长动能强的公司,其未来现金流稳定性更高,应享有估值溢价;动能衰减则预示基本面临顶。 |
||||
|
||||
[[实施方案]] |
||||
基于客户新增数量、流失率、客单价等字段,通过ts_growth算子计算LTV的季度环比增长率。使用时序动量算子(如ts_rank对过去4个季度的增长率进行排序),对动量处于持续上升通道的公司建立多头仓位。采用行业中性化处理,仅在细分赛道(如企业级SaaS)内进行横截面比较。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
为降低噪声,可结合财报电话会文本分析,提取管理层对“客户健康度”“留存趋势”的定性评论,构建情绪调整因子。当量化LTV动量与文本情绪一致时,增强信号权重;当背离时,降低权重或屏蔽信号。 |
||||
|
||||
--- |
||||
|
||||
ESG争议事件修复效应 |
||||
[[假设]] |
||||
|
||||
ESG争议事件爆发后,市场往往存在短期过度反应,导致股价偏离内在价值。若公司在争议后及时采取有效整改措施(如完善合规体系、发布整改报告、引入第三方监督),其ESG表现将逐步修复,市场情绪也会随之回暖,股价大概率回归合理区间,此类公司可建立多头仓位;反之,对争议后无整改动作、ESG表现持续恶化的公司,应建立空头仓位以规避风险。 |
||||
|
||||
[[实施方案]] |
||||
|
||||
筛选过去12个月内发生ESG争议事件的标的,跟踪事件爆发后3个月、6个月、12个月的整改进展及ESG表现变化趋势。通过时序分析工具量化整改措施的落地成效,结合股价波动数据,构建“争议严重程度-整改效率-股价修复幅度”的关联指标,对整改成效显著且股价尚未充分修复的标的配置正向权重。 |
||||
|
||||
[[阿尔法因子优化建议]] |
||||
|
||||
建议按ESG争议类型(环境违规、社会责任缺失、公司治理缺陷)进行分组,不同类型争议的修复周期与市场敏感度差异较大,分组后可提升因子针对性。同时,引入行业ESG基准值做中性化处理,消除行业属性对ESG表现及整改难度的影响;可叠加流动性因子过滤,避免因股价修复过程中流动性不足导致的交易成本上升。帮我写一份类似这样的金融逻辑的描述, |
||||
如果你不清楚我有什么数据集字段, 可以不用说, 只需要逻辑描述清晰就行 |
||||
输出的格式和我上面给你的例子一样, |
||||
但是要创新一个金融逻辑研究方向 |
||||
|
||||
先生成一份中文的, 格式如下: |
||||
|
||||
输出格式: |
||||
**名称** |
||||
... |
||||
**假设** |
||||
... |
||||
**实施方案** |
||||
... |
||||
**阿尔法因子优化建议** |
||||
|
||||
然后再将生成出来的内容, 翻译一份英文,格式和中文一样 |
||||
@ -0,0 +1,208 @@ |
||||
任务指令 |
||||
**名称** |
||||
机构投资者持仓分歧度因子 |
||||
**假设** |
||||
当同一行业内多家机构投资者对某只股票的持仓方向出现显著分歧(如部分机构大幅增持而其他机构大幅减持)时,可能预示市场对该股票的未来预期存在较大不确定性。这种分歧短期内可能加剧股价波动,但中长期会随基本面明朗化逐步收敛——持仓共识度逐步提升的股票更可能形成趋势性行情。 |
||||
**实施方案** |
||||
基于机构持仓数据,计算每季度末各股票在同类机构(如公募、保险、QFII等)群体中的持仓变动标准差,衡量持仓分歧度。使用时序衰减算子(如ts_decay_linear)对近4个季度的分歧度进行加权,捕捉分歧度的变化趋势。对分歧度持续收窄且机构净流入的股票赋予多头权重,对分歧度扩大或机构净流出的股票赋予空头权重。 |
||||
**阿尔法因子优化建议** |
||||
建议按机构类型分组计算分歧度(如长线资金vs短线资金),并采用横截面中性化处理消除行业偏好影响。可引入动量放大器:当股价已处于上升通道且分歧度收敛时,加大权重分配;若股价与分歧度背离,则降低信号强度。 |
||||
逻辑的核心在于“趋势”与“相对位置”的交互。建议引入横截面动量算子(如“rank”)对最终的斜率值进行再排序,以强化头部与尾部信号。同时,可考虑对营业收入增长率施加条件约束(例如,仅当营收增长率非负时信号生效),以避免因收缩业务导致毛利率被动提升的噪音干扰。 |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
以下是错误的组合, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:forward_price_120', 'description': '不可使用,仅供参考:Forward price at 120 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_cibegniq', 'description': '不可使用,仅供参考:Comp Inc - Beginning Net Income'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} |
||||
{'data_set_name': '可以使用:fnd2_a_ltrmdmrepopliny5', 'description': '不可使用,仅供参考:Amount of long-term debt payable, sinking fund requirements, and other securities issued that are redeemable by holder at fixed or determinable prices and dates maturing in the 5th fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,205 @@ |
||||
任务指令 |
||||
**Name** |
||||
Institutional Investor Holding Divergence Factor |
||||
**Hypothesis** |
||||
When institutional investors within the same industry show significant divergence in their positioning toward a stock (e.g., some institutions substantially increase holdings while others sharply reduce), it may indicate high uncertainty in market expectations for the stock. Such divergence could amplify short-term price volatility, but over the medium to long term, as fundamentals become clearer, consensus tends to converge—stocks with improving holding consensus are more likely to develop trend-driven returns. |
||||
**Implementation** |
||||
Using institutional holding data, calculate the standard deviation of quarterly holding changes for each stock across peer institution groups (e.g., mutual funds, insurance, QFII) to measure holding divergence. Apply a time-series decay operator (e.g., ts_decay_linear) to weight divergence over the past four quarters, capturing its trend. Assign long weights to stocks with consistently narrowing divergence and net institutional inflows, and short weights to those with widening divergence or net outflows. |
||||
**Alpha Factor Optimization Suggestions** |
||||
Recommend calculating divergence by institution type (e.g., long-term vs. short-term capital) and applying cross-sectional neutralization to eliminate industry biases. Consider incorporating a momentum amplifier: increase weight allocation when the stock price is in an upward trend and divergence is converging; reduce signal strength if price action and divergence diverge. |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
以下是错误的组合, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:forward_price_120', 'description': '不可使用,仅供参考:Forward price at 120 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_cibegniq', 'description': '不可使用,仅供参考:Comp Inc - Beginning Net Income'} |
||||
{'data_set_name': '可以使用:news_high_exc_stddev', 'description': '不可使用,仅供参考:(EODHigh - TONLast)/StdDev, where StdDev is one standard deviation for the close price for 30 calendar days'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,211 @@ |
||||
任务指令 |
||||
**名称** |
||||
机构投资者持仓集中度反转效应 |
||||
**假设** |
||||
当一家公司的机构投资者持仓高度集中(如前五大机构持股比例显著高于历史中位数),可能意味着该股票短期内因资金抱团而出现估值泡沫;但随着机构调仓或共识分化,持仓集中度会逐步下降,导致股价回调。反之,若机构持仓集中度从低位持续回升,则预示机构资金重新形成共识,可能推动股价上涨。 |
||||
**实施方案** |
||||
使用机构持股明细数据,计算每季度前五大机构持股比例之和的横截面分位数排名。通过时序差分算子(如 `ts_delta`)监测持仓集中度的变化方向与幅度,对集中度从高位(前30%)显著回落(分位数下降超过20%)的股票建立空头仓位,对集中度从低位(后30%)持续攀升(分位数上升超过20%)的股票建立多头仓位。 |
||||
**阿尔法因子优化建议** |
||||
不同市值风格股票的机构行为差异显著(如大盘股机构持仓稳定性更高)。建议按市值分档进行动态中性化处理,并在因子中引入“机构持仓稳定性”指标(如持仓周期方差)作为调节参数,对稳定性低的股票赋予更高权重,以捕捉短期调仓带来的反转机会。 |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
以下是错误的组合, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:multi_factor_acceleration_score_derivative', 'description': '不可使用,仅供参考:Change in the acceleration of multi-factor score compared to previous period.'} |
||||
{'data_set_name': '可以使用:pv13_h2_min2_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min22_1000_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min24_500_sector', 'description': '不可使用,仅供参考:Grouping fields for top 500'} |
||||
{'data_set_name': '可以使用:pv13_h_min2_focused_sector', 'description': '不可使用,仅供参考:Grouping fields for top 200'} |
||||
{'data_set_name': '可以使用:pv13_h_min52_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:fn_comp_not_rec_stock_options_a', 'description': '不可使用,仅供参考:Unrecognized cost of unvested stock option awards.'} |
||||
{'data_set_name': '可以使用:fn_comp_not_rec_stock_options_q', 'description': '不可使用,仅供参考:Unrecognized cost of unvested stock option awards.'} |
||||
{'data_set_name': '可以使用:fnd2_a_ltrmdmrepopliny5', 'description': '不可使用,仅供参考:Amount of long-term debt payable, sinking fund requirements, and other securities issued that are redeemable by holder at fixed or determinable prices and dates maturing in the 5th fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,224 @@ |
||||
任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha |
||||
Name |
||||
Digital Asset Liquidity Premium Factor |
||||
Hypothesis |
||||
In the digital economy era, a non-linear relationship exists between the liquidity of digital assets held by companies (such as cryptocurrencies, digital copyrights, user data assets, blockchain-verified assets, etc.) and their market valuation. The market typically assigns a "digital liquidity premium" to companies with portfolios of highly liquid digital assets, as these assets are easily monetizable, can serve as high-quality collateral, and enable quick capture of emerging market opportunities. Conversely, if a company's digital assets suffer from poor liquidity (e.g., subject to lock-up periods, traded in private markets, lacking trading platforms), their potential value is difficult to discount immediately and may even become a liability during crises, leading to a valuation discount. |
||||
Implementation Plan |
||||
Construct a "Digital Asset Liquidity Score." First, identify and aggregate the categories and valuations of digital assets disclosed in company financial statement notes, special announcements, and industry databases. Second, assign a liquidity weight parameter to each asset category (based on dimensions such as breadth of trading markets, average daily trading volume, regulatory clarity, and acceptability for collateralized financing). Finally, calculate the weighted total score and divide it by the company's total market capitalization to control for size effects. Use a time-series comparison operator (e.g., ts_max) to capture the historical percentile rank of this score over the past year. Establish long positions in companies whose scores consistently rank in their own historical high percentiles and are top-ranked in peer cross-sectional comparisons. |
||||
Alpha Factor Optimization Suggestion |
||||
The valuation volatility of digital assets is extreme, and using the raw score alone may introduce noise. It is recommended to overlay a volatility adjustment mechanism: use ts_stddev to calculate the rolling volatility of the score's rate of change, and assign higher alpha weights to the combination of "high score and low volatility" to filter for companies whose digital asset value is being released stably. Additionally, a "Digital Asset Correlation" operator can be introduced to assess the correlation between a company's digital asset portfolio and mainstream digital market indices (e.g., a cryptocurrency index). Companies with low correlation should receive a positive adjustment to capture unique, non-systematic digital value. |
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
注意!!以下操作符不能使用事件类的数据集, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:forward_price_120', 'description': '不可使用,仅供参考:Forward price at 120 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} |
||||
{'data_set_name': '可以使用:fnd6_capxv', 'description': '不可使用,仅供参考:Capital Expend Property, Plant and Equipment Schd V'} |
||||
{'data_set_name': '可以使用:fnd6_ciother', 'description': '不可使用,仅供参考:Comp. Inc. - Other Adj.'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_ciotherq', 'description': '不可使用,仅供参考:Comp Inc - Other Adj'} |
||||
{'data_set_name': '可以使用:sales_ps', 'description': '不可使用,仅供参考:Sales per Share (Quarterly)'} |
||||
{'data_set_name': '可以使用:fscore_bfl_total', 'description': '不可使用,仅供参考:The final score M-Score is a weighted average of both the Pentagon surface score and the Pentagon acceleration score.'} |
||||
{'data_set_name': '可以使用:multi_factor_acceleration_score_derivative', 'description': '不可使用,仅供参考:Change in the acceleration of multi-factor score compared to previous period.'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:min_reported_eps_guidance', 'description': '不可使用,仅供参考:Reported Earnings Per Share - Minimum guidance value for the annual period'} |
||||
{'data_set_name': '可以使用:sg_and_admin_min_guidance_value', 'description': '不可使用,仅供参考:Minimum guidance value for Selling, General & Administrative Expense on an annual basis.'} |
||||
{'data_set_name': '可以使用:pv13_h2_min2_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min22_1000_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min24_500_sector', 'description': '不可使用,仅供参考:Grouping fields for top 500'} |
||||
{'data_set_name': '可以使用:pv13_h_min2_focused_sector', 'description': '不可使用,仅供参考:Grouping fields for top 200'} |
||||
{'data_set_name': '可以使用:pv13_h_min52_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} |
||||
{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} |
||||
{'data_set_name': '可以使用:fn_def_tax_assets_liab_net_q', 'description': '不可使用,仅供参考:Amount, after allocation of valuation allowances and deferred tax liability, of deferred tax asset attributable to deductible differences and carryforwards, without jurisdictional netting.'} |
||||
{'data_set_name': '可以使用:fn_def_tax_liab_a', 'description': '不可使用,仅供参考:Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences without jurisdictional netting.'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_a', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Total'} |
||||
{'data_set_name': '可以使用:fn_op_lease_min_pay_due_in_2y_a', 'description': '不可使用,仅供参考:Amount of required minimum rental payments for operating leases having an initial or remaining non-cancelable lease term in excess of 1 year due in the 2nd fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} |
||||
{'data_set_name': '可以使用:fn_treasury_stock_shares_a', 'description': '不可使用,仅供参考:Number of common and preferred shares that were previously issued and that were repurchased by the issuing entity and held in treasury on the financial statement date. This stock has no voting rights and receives no dividends.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,235 @@ |
||||
任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha |
||||
**Name** |
||||
Smart Capital Allocation Efficiency Factor |
||||
**Assumption** |
||||
Corporate capital allocation efficiency — i.e., the free cash flow or economic value added generated per unit of capital invested — is a core indicator of management’s strategic execution. Companies that persistently allocate capital to low-return projects (e.g., ROIC < WACC), even with strong revenue growth, are likely to face downward valuation re-rating over time. Conversely, firms that precisely deploy capital into high-return areas (e.g., ROIC > WACC and expanding) may earn valuation premiums even with modest short-term growth. The market often prices capital allocation efficiency with a lag, especially after earnings seasons or strategic announcements, offering opportunities to capture alpha from expectation gaps. |
||||
**Implementation Plan** |
||||
Construct a “Capital Allocation Efficiency Score” = (ROIC - WACC) × Capital Expenditure Growth Rate × Free Cash Flow / Capital Expenditure. Use time-series operators to compute rolling 3-year metrics, identifying firms with persistently deteriorating efficiency (bottom 20% percentile) for short positions, and those with improving efficiency (top 20% percentile) for long positions. To mitigate industry bias, apply industry-neutralization by ranking only within peer groups. |
||||
**Alpha Factor Optimization Suggestions** |
||||
Introduce a “Capital Allocation Intent” textual factor: extract keywords such as “investment focus,” “return targets,” and “capital discipline” from earnings call transcripts or management discussion sections in annual reports to build a semantic matching score. Fuse this with the quantitative efficiency score via weighted combination. When textual and quantitative signals align, amplify the factor weight; when they diverge (e.g., management claims “focusing on high-return areas” while ROIC continues to decline), trigger signal decay or suppression to reduce false positives. |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
注意!!以下操作符不能使用事件类的数据集, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:forward_price_120', 'description': '不可使用,仅供参考:Forward price at 120 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} |
||||
{'data_set_name': '可以使用:fnd6_capxv', 'description': '不可使用,仅供参考:Capital Expend Property, Plant and Equipment Schd V'} |
||||
{'data_set_name': '可以使用:fnd6_ciother', 'description': '不可使用,仅供参考:Comp. Inc. - Other Adj.'} |
||||
{'data_set_name': '可以使用:fnd6_newa2v1300_oiadp', 'description': '不可使用,仅供参考:Operating Income After Depreciation'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_gdwliaq', 'description': '不可使用,仅供参考:Impairment of Goodwill After-tax'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_glceaq', 'description': '不可使用,仅供参考:Gain/Loss on Sale (Core Earnings Adjusted) After-tax'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spceeps12', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic 12MM'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spceepsq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcep12', 'description': '不可使用,仅供参考:S&P Core Earnings 12MM - Preliminary'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcepd12', 'description': '不可使用,仅供参考:S&P Core Earnings 12MM EPS Diluted - Preliminary'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_ciotherq', 'description': '不可使用,仅供参考:Comp Inc - Other Adj'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_spceepsp12', 'description': '不可使用,仅供参考:S&P Core 12MM EPS - Basic - Preliminary'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_spceepsq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic'} |
||||
{'data_set_name': '可以使用:fnd6_oiadps', 'description': '不可使用,仅供参考:Operating Income after Depreciation'} |
||||
{'data_set_name': '可以使用:fnd6_spce', 'description': '不可使用,仅供参考:S&P Core Earnings'} |
||||
{'data_set_name': '可以使用:sales_ps', 'description': '不可使用,仅供参考:Sales per Share (Quarterly)'} |
||||
{'data_set_name': '可以使用:fscore_bfl_total', 'description': '不可使用,仅供参考:The final score M-Score is a weighted average of both the Pentagon surface score and the Pentagon acceleration score.'} |
||||
{'data_set_name': '可以使用:fscore_total', 'description': '不可使用,仅供参考:The final score M-Score is a weighted average of both the Pentagon surface score and the Pentagon acceleration score.'} |
||||
{'data_set_name': '可以使用:multi_factor_acceleration_score_derivative', 'description': '不可使用,仅供参考:Change in the acceleration of multi-factor score compared to previous period.'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:min_reported_eps_guidance', 'description': '不可使用,仅供参考:Reported Earnings Per Share - Minimum guidance value for the annual period'} |
||||
{'data_set_name': '可以使用:pv13_h2_min2_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min22_1000_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:pv13_h_min24_500_sector', 'description': '不可使用,仅供参考:Grouping fields for top 500'} |
||||
{'data_set_name': '可以使用:pv13_h_min2_focused_sector', 'description': '不可使用,仅供参考:Grouping fields for top 200'} |
||||
{'data_set_name': '可以使用:pv13_h_min52_1k_sector', 'description': '不可使用,仅供参考:Grouping fields for top 1000'} |
||||
{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} |
||||
{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} |
||||
{'data_set_name': '可以使用:fn_def_tax_liab_a', 'description': '不可使用,仅供参考:Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences without jurisdictional netting.'} |
||||
{'data_set_name': '可以使用:fn_op_lease_min_pay_due_in_2y_a', 'description': '不可使用,仅供参考:Amount of required minimum rental payments for operating leases having an initial or remaining non-cancelable lease term in excess of 1 year due in the 2nd fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} |
||||
{'data_set_name': '可以使用:fn_treasury_stock_shares_a', 'description': '不可使用,仅供参考:Number of common and preferred shares that were previously issued and that were repurchased by the issuing entity and held in treasury on the financial statement date. This stock has no voting rights and receives no dividends.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,227 @@ |
||||
任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha |
||||
**Name** |
||||
Brand Sentiment Lag Premium Factor |
||||
**Assumption** |
||||
Consumer sentiment toward a brand (e.g., social media praise, search volume, user ratings) typically accumulates gradually after marketing campaigns or product launches, but the market’s pricing of brand value often lags behind sentiment shifts. When brand sentiment rises persistently but stock prices have not yet fully reflected it, a “sentiment-price” mispricing opportunity emerges; conversely, when sentiment turns downward while prices remain elevated, it may signal an impending correction. This factor captures the time-lag effect between brand sentiment and price reaction, building an alpha logic based on “sentiment momentum leading price momentum.” |
||||
**Implementation** |
||||
Construct a “Brand Sentiment Composite Index” by integrating multi-source data (e.g., social media sentiment scores, brand search trends, user rating trajectories, e-commerce review sentiment). Apply a time-series smoothing operator (e.g., ts_ewma) to filter out short-term noise. Use the ts_lag operator to shift the sentiment index by 3–6 months, then compute rolling correlations with concurrent stock returns. Establish long positions in companies where sentiment leads price momentum with statistically significant positive correlation; establish short positions in companies where sentiment has peaked but prices continue rising. Apply industry-neutralization to mitigate industry-specific sentiment cycles. |
||||
**Alpha Factor Optimization Suggestions** |
||||
It is recommended to introduce a “sentiment inflection point detection operator” using ts_slope or ts_change_rate to identify trend reversals, triggering position adjustments only after confirmation to reduce false signals. Additionally, overlay “brand moat strength” as a moderating variable — in industries with high brand loyalty and low substitutability, the sentiment lag effect is more pronounced, allowing higher weights for such companies. Furthermore, consider dynamically rebalancing the sentiment factor around quarterly earnings releases to capture accelerated pricing effects from earnings realization. |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
|
||||
================================================================= |
||||
注意!!以下操作符不能使用事件类的数据集, 请勿类似的操作: |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:forward_price_120', 'description': '不可使用,仅供参考:Forward price at 120 days derived from a synthetic long option with payoff similar to long stock + option dynamics. Combination of long ATM call and short ATM put.'} |
||||
{'data_set_name': '可以使用:fnd6_ciother', 'description': '不可使用,仅供参考:Comp. Inc. - Other Adj.'} |
||||
{'data_set_name': '可以使用:fnd6_eventv110_gdwlieps12', 'description': '不可使用,仅供参考:Impairment of Goodwill Basic EPS Effect 12MM'} |
||||
{'data_set_name': '可以使用:fnd6_eventv110_gdwliepsq', 'description': '不可使用,仅供参考:Impairment of Goodwill Basic EPS Effect'} |
||||
{'data_set_name': '可以使用:fnd6_newa2v1300_oiadp', 'description': '不可使用,仅供参考:Operating Income After Depreciation'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_gdwliaq', 'description': '不可使用,仅供参考:Impairment of Goodwill After-tax'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_glceaq', 'description': '不可使用,仅供参考:Gain/Loss on Sale (Core Earnings Adjusted) After-tax'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spceeps12', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic 12MM'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spceepsq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcep12', 'description': '不可使用,仅供参考:S&P Core Earnings 12MM - Preliminary'} |
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_spcepd12', 'description': '不可使用,仅供参考:S&P Core Earnings 12MM EPS Diluted - Preliminary'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_ciotherq', 'description': '不可使用,仅供参考:Comp Inc - Other Adj'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_spcedq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Diluted'} |
||||
{'data_set_name': '可以使用:fnd6_newqv1300_spceepsq', 'description': '不可使用,仅供参考:S&P Core Earnings EPS Basic'} |
||||
{'data_set_name': '可以使用:fnd6_oiadps', 'description': '不可使用,仅供参考:Operating Income after Depreciation'} |
||||
{'data_set_name': '可以使用:fnd6_spce', 'description': '不可使用,仅供参考:S&P Core Earnings'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} |
||||
{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} |
||||
{'data_set_name': '可以使用:fn_comp_not_rec_stock_options_a', 'description': '不可使用,仅供参考:Unrecognized cost of unvested stock option awards.'} |
||||
{'data_set_name': '可以使用:fn_comp_not_rec_stock_options_q', 'description': '不可使用,仅供参考:Unrecognized cost of unvested stock option awards.'} |
||||
{'data_set_name': '可以使用:fn_def_tax_assets_liab_net_q', 'description': '不可使用,仅供参考:Amount, after allocation of valuation allowances and deferred tax liability, of deferred tax asset attributable to deductible differences and carryforwards, without jurisdictional netting.'} |
||||
{'data_set_name': '可以使用:fn_def_tax_liab_a', 'description': '不可使用,仅供参考:Amount, after deferred tax asset, of deferred tax liability attributable to taxable differences without jurisdictional netting.'} |
||||
{'data_set_name': '可以使用:fn_op_lease_min_pay_due_in_2y_a', 'description': '不可使用,仅供参考:Amount of required minimum rental payments for operating leases having an initial or remaining non-cancelable lease term in excess of 1 year due in the 2nd fiscal year following the latest fiscal year. Excludes interim and annual periods when interim periods are reported on a rolling approach, from latest balance sheet date.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,182 @@ |
||||
任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha |
||||
**名称** |
||||
品牌情绪滞后溢价因子 |
||||
**假设** |
||||
消费者对品牌的正面情绪(如社交媒体好评、搜索热度、用户评分等)通常在品牌营销活动或产品发布后逐步积累,但市场对品牌价值的定价往往滞后于情绪变化。当品牌情绪持续上升但股价尚未充分反应时,存在“情绪-价格”错配机会;反之,当情绪拐头向下而股价仍高位运行时,可能预示回调风险。该因子捕捉品牌情绪与股价反应之间的时滞效应,构建“情绪动量领先于价格动量”的超额收益逻辑。 |
||||
**实施方案** |
||||
构建“品牌情绪综合指数”,整合多源数据(如社交媒体情感得分、品牌搜索指数、用户评分趋势、电商评论情感等),通过时序平滑算子(如ts_ewma)消除短期噪声。使用ts_lag算子将情绪指数滞后3-6个月,与同期股价收益率进行滚动相关性分析。对情绪指数领先股价动量且相关性显著为正的公司建立多头仓位;对情绪拐点已现但股价仍上涨的公司建立空头仓位。采用行业中性化处理,避免行业情绪周期干扰。 |
||||
**阿尔法因子优化建议** |
||||
建议引入“情绪拐点识别算子”,通过ts_slope或ts_change_rate识别情绪趋势的转折点,仅在拐点确认后触发仓位调整,以降低假信号。同时,可叠加“品牌护城河强度”作为调节变量——在品牌忠诚度高、替代品少的行业中,情绪滞后效应更显著,可对这类公司赋予更高权重。此外,建议在季度财报发布前后对情绪因子进行动态再平衡,以捕捉业绩兑现对情绪定价的加速作用。 |
||||
|
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
================================================================= |
||||
ts_product ts_zscore ts_mean ts_scale add sign subtract ts_delta ts_rank greater ts_av_diff ts_quantile ts_count_nans ts_covariance |
||||
ts_arg_min divide ts_corr multiply if_else ts_sum ts_delay group_zscore ts_arg_max ts_std_de ts_backfill |
||||
以上这些操作符不能传入事件类型的数据集, 只能传入时间序列数据集, 不能传入事件数据,不能传入事件数据,不能传入事件数据 |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:fscore_bfl_total', 'description': '不可使用,仅供参考:The final score M-Score is a weighted average of both the Pentagon surface score and the Pentagon acceleration score.'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:news_max_up_amt', 'description': '不可使用,仅供参考:The after the news high minus the price at the time of the news'} |
||||
{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,191 @@ |
||||
任务指令: 你需要根据以下这个金融逻辑, 组合创新 alpha |
||||
数字化客户粘性溢价 |
||||
假设 |
||||
在数字经济时代,拥有高度数字化客户互动渠道和强大用户粘性的公司(如高频使用的移动应用、高活跃度的在线社区、高转化率的私域流量),能够以更低的边际成本获取更高质量的用户数据和现金流。这种数字化粘性构筑了强大的竞争护城河,其价值尚未被传统财务指标充分定价,有望在未来产生持续的超额收益。 |
||||
实施方案 |
||||
整合月活跃用户(MAU)增长率、用户日均使用时长、用户生命周期价值(LTV)与获客成本(CAC)的比率等数字化运营数据字段。使用时序动量算子(如ts_rank)对过去一年内“用户时长增长率”与“LTV/CAC比率”的综合得分进行排序。对排名持续提升且处于前30%的公司赋予正向阿尔法权重,并结合横截面标准化确保信号在同类商业模式公司(如消费互联网、金融科技)内进行比较。 |
||||
阿尔法因子优化建议 |
||||
数字化粘性的价值在不同增长阶段(导入期、成长期、成熟期)差异显著。建议引入“增长阶段分档”算子,根据用户规模增速和营收增速对公司进行动态分类,在各自的阶段组内计算粘性指标的相对强弱,以避免对处于不同生命周期公司的误判。此外,可叠加“变现效率变化”指标(如每用户平均收入(ARPU)的环比加速度),在粘性提升的同时,筛选出变现能力同步增强的标的,以增强信号的纯度。 |
||||
*=========================================================================================* |
||||
输出格式: |
||||
输出必须是且仅是纯文本。 |
||||
每一行是一个完整、独立、语法正确的WebSim表达式。 |
||||
严禁任何形式的解释、编号、标点包裹(如引号)、Markdown格式或额外文本。 |
||||
===================== !!! 重点(输出方式) !!! ===================== |
||||
现在,请严格遵守以上所有规则,开始生成可立即在WebSim中运行的复合因子表达式。 |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
**输出格式**(一行一个表达式, 每个表达式中间需要添加一个空行, 只要表达式本身, 不需要赋值, 不要解释, 不需要序号, 也不要输出多余的东西): |
||||
表达式 |
||||
表达式 |
||||
表达式 |
||||
... |
||||
表达式 |
||||
================================================================= |
||||
重申:请确保所有表达式都使用WorldQuant WebSim平台函数,不要使用pandas、numpy或其他Python库函数。输出必须是一行有效的WQ表达式。 |
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 以及我提供的数据集, 进行生成,组合 20 个alpha: |
||||
不要自行假设, 你需要用到的操作符 和 数据集, 必须从我提供给你的里面查找, 并严格按照里面的使用方法进行组合 |
||||
================================================================= |
||||
ts_product ts_zscore ts_mean ts_scale add sign subtract ts_delta ts_rank greater ts_av_diff ts_quantile ts_count_nans ts_covariance |
||||
ts_arg_min divide ts_corr multiply if_else ts_sum ts_delay group_zscore ts_arg_max ts_std_de ts_backfill |
||||
以上这些操作符不能传入事件类型的数据集, 只能传入时间序列数据集, 不能传入事件数据,不能传入事件数据,不能传入事件数据 |
||||
|
||||
以下是我的账号有权限使用的操作符, 请严格按照操作符, 进行生成,组合因子 |
||||
|
||||
========================= 操作符开始 ======================================= |
||||
注意: Operator: 后面的是操作符(是可以使用的), |
||||
Description: 此字段后面的是操作符对应的描述或使用说明(禁止使用, 仅供参考), Description字段后面的内容是使用说明, 不是操作符 |
||||
特别注意!!!! 必须按照操作符字段Operator的使用说明生成 alphaOperator: abs(x) |
||||
Description: Absolute value of x |
||||
Operator: add(x, y, filter = false) |
||||
Description: Add all inputs (at least 2 inputs required). If filter = true, filter all input NaN to 0 before adding |
||||
Operator: densify(x) |
||||
Description: Converts a grouping field of many buckets into lesser number of only available buckets so as to make working with grouping fields computationally efficient |
||||
Operator: divide(x, y) |
||||
Description: x / y |
||||
Operator: inverse(x) |
||||
Description: 1 / x |
||||
Operator: log(x) |
||||
Description: Natural logarithm. For example: Log(high/low) uses natural logarithm of high/low ratio as stock weights. |
||||
Operator: max(x, y, ..) |
||||
Description: Maximum value of all inputs. At least 2 inputs are required |
||||
Operator: min(x, y ..) |
||||
Description: Minimum value of all inputs. At least 2 inputs are required |
||||
Operator: multiply(x ,y, ... , filter=false) |
||||
Description: Multiply all inputs. At least 2 inputs are required. Filter sets the NaN values to 1 |
||||
Operator: power(x, y) |
||||
Description: x ^ y |
||||
Operator: reverse(x) |
||||
Description: - x |
||||
Operator: sign(x) |
||||
Description: if input > 0, return 1; if input < 0, return -1; if input = 0, return 0; if input = NaN, return NaN; |
||||
Operator: signed_power(x, y) |
||||
Description: x raised to the power of y such that final result preserves sign of x |
||||
Operator: sqrt(x) |
||||
Description: Square root of x |
||||
Operator: subtract(x, y, filter=false) |
||||
Description: x-y. If filter = true, filter all input NaN to 0 before subtracting |
||||
Operator: and(input1, input2) |
||||
Description: Logical AND operator, returns true if both operands are true and returns false otherwise |
||||
Operator: if_else(input1, input2, input 3) |
||||
Description: If input1 is true then return input2 else return input3. |
||||
Operator: input1 < input2 |
||||
Description: If input1 < input2 return true, else return false |
||||
Operator: input1 <= input2 |
||||
Description: Returns true if input1 <= input2, return false otherwise |
||||
Operator: input1 == input2 |
||||
Description: Returns true if both inputs are same and returns false otherwise |
||||
Operator: input1 > input2 |
||||
Description: Logic comparison operators to compares two inputs |
||||
Operator: input1 >= input2 |
||||
Description: Returns true if input1 >= input2, return false otherwise |
||||
Operator: input1!= input2 |
||||
Description: Returns true if both inputs are NOT the same and returns false otherwise |
||||
Operator: is_nan(input) |
||||
Description: If (input == NaN) return 1 else return 0 |
||||
Operator: not(x) |
||||
Description: Returns the logical negation of x. If x is true (1), it returns false (0), and if input is false (0), it returns true (1). |
||||
Operator: or(input1, input2) |
||||
Description: Logical OR operator returns true if either or both inputs are true and returns false otherwise |
||||
Operator: days_from_last_change(x) |
||||
Description: Amount of days since last change of x |
||||
Operator: hump(x, hump = 0.01) |
||||
Description: Limits amount and magnitude of changes in input (thus reducing turnover) |
||||
Operator: kth_element(x, d, k) |
||||
Description: Returns K-th value of input by looking through lookback days. This operator can be used to backfill missing data if k=1 |
||||
Operator: last_diff_value(x, d) |
||||
Description: Returns last x value not equal to current x value from last d days |
||||
Operator: ts_arg_max(x, d) |
||||
Description: Returns the relative index of the max value in the time series for the past d days. If the current day has the max value for the past d days, it returns 0. If previous day has the max value for the past d days, it returns 1 |
||||
Operator: ts_arg_min(x, d) |
||||
Description: Returns the relative index of the min value in the time series for the past d days; If the current day has the min value for the past d days, it returns 0; If previous day has the min value for the past d days, it returns 1. |
||||
Operator: ts_av_diff(x, d) |
||||
Description: Returns x - tsmean(x, d), but deals with NaNs carefully. That is NaNs are ignored during mean computation |
||||
Operator: ts_backfill(x,lookback = d, k=1, ignore="NAN") |
||||
Description: Backfill is the process of replacing the NAN or 0 values by a meaningful value (i.e., a first non-NaN value) |
||||
Operator: ts_corr(x, y, d) |
||||
Description: Returns correlation of x and y for the past d days |
||||
Operator: ts_count_nans(x ,d) |
||||
Description: Returns the number of NaN values in x for the past d days |
||||
Operator: ts_covariance(y, x, d) |
||||
Description: Returns covariance of y and x for the past d days |
||||
Operator: ts_decay_linear(x, d, dense = false) |
||||
Description: Returns the linear decay on x for the past d days. Dense parameter=false means operator works in sparse mode and we treat NaN as 0. In dense mode we do not. |
||||
Operator: ts_delay(x, d) |
||||
Description: Returns x value d days ago |
||||
Operator: ts_delta(x, d) |
||||
Description: Returns x - ts_delay(x, d) |
||||
Operator: ts_mean(x, d) |
||||
Description: Returns average value of x for the past d days. |
||||
Operator: ts_product(x, d) |
||||
Description: Returns product of x for the past d days |
||||
Operator: ts_quantile(x,d, driver="gaussian" ) |
||||
Description: It calculates ts_rank and apply to its value an inverse cumulative density function from driver distribution. Possible values of driver (optional ) are "gaussian", "uniform", "cauchy" distribution where "gaussian" is the default. |
||||
Operator: ts_rank(x, d, constant = 0) |
||||
Description: Rank the values of x for each instrument over the past d days, then return the rank of the current value + constant. If not specified, by default, constant = 0. |
||||
Operator: ts_regression(y, x, d, lag = 0, rettype = 0) |
||||
Description: Returns various parameters related to regression function |
||||
Operator: ts_scale(x, d, constant = 0) |
||||
Description: Returns (x - ts_min(x, d)) / (ts_max(x, d) - ts_min(x, d)) + constant. This operator is similar to scale down operator but acts in time series space |
||||
Operator: ts_std_dev(x, d) |
||||
Description: Returns standard deviation of x for the past d days |
||||
Operator: ts_step(1) |
||||
Description: Returns days' counter |
||||
Operator: ts_sum(x, d) |
||||
Description: Sum values of x for the past d days. |
||||
Operator: ts_zscore(x, d) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean: (x - tsmean(x,d)) / tsstddev(x,d). This operator may help reduce outliers and drawdown. |
||||
Operator: normalize(x, useStd = false, limit = 0.0) |
||||
Description: Calculates the mean value of all valid alpha values for a certain date, then subtracts that mean from each element |
||||
Operator: quantile(x, driver = gaussian, sigma = 1.0) |
||||
Description: Rank the raw vector, shift the ranked Alpha vector, apply distribution (gaussian, cauchy, uniform). If driver is uniform, it simply subtract each Alpha value with the mean of all Alpha values in the Alpha vector |
||||
Operator: rank(x, rate=2) |
||||
Description: Ranks the input among all the instruments and returns an equally distributed number between 0.0 and 1.0. For precise sort, use the rate as 0 |
||||
Operator: scale(x, scale=1, longscale=1, shortscale=1) |
||||
Description: Scales input to booksize. We can also scale the long positions and short positions to separate scales by mentioning additional parameters to the operator |
||||
Operator: winsorize(x, std=4) |
||||
Description: Winsorizes x to make sure that all values in x are between the lower and upper limits, which are specified as multiple of std. |
||||
Operator: zscore(x) |
||||
Description: Z-score is a numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean |
||||
Operator: vec_avg(x) |
||||
Description: Taking mean of the vector field x |
||||
Operator: vec_sum(x) |
||||
Description: Sum of vector field x |
||||
Operator: bucket(rank(x), range="0, 1, 0.1" or buckets = "2,5,6,7,10") |
||||
Description: Convert float values into indexes for user-specified buckets. Bucket is useful for creating group values, which can be passed to GROUP as input |
||||
Operator: trade_when(x, y, z) |
||||
Description: Used in order to change Alpha values only under a specified condition and to hold Alpha values in other cases. It also allows to close Alpha positions (assign NaN values) under a specified condition |
||||
Operator: group_backfill(x, group, d, std = 4.0) |
||||
Description: If a certain value for a certain date and instrument is NaN, from the set of same group instruments, calculate winsorized mean of all non-NaN values over last d days |
||||
Operator: group_mean(x, weight, group) |
||||
Description: All elements in group equals to the mean |
||||
Operator: group_neutralize(x, group) |
||||
Description: Neutralizes Alpha against groups. These groups can be subindustry, industry, sector, country or a constant |
||||
Operator: group_rank(x, group) |
||||
Description: Each elements in a group is assigned the corresponding rank in this group |
||||
Operator: group_scale(x, group) |
||||
Description: Normalizes the values in a group to be between 0 and 1. (x - groupmin) / (groupmax - groupmin) |
||||
Operator: group_zscore(x, group) |
||||
Description: Calculates group Z-score - numerical measurement that describes a value's relationship to the mean of a group of values. Z-score is measured in terms of standard deviations from the mean. zscore = (data - mean) / stddev of x for each instrument within its group. |
||||
========================= 操作符结束 ======================================= |
||||
|
||||
========================= 数据字段开始 ======================================= |
||||
注意: data_set_name: 后面的是数据字段(可以使用), description: 此字段后面的是数据字段对应的描述或使用说明(不能使用), description_cn字段后面的内容是中文使用说明(不能使用) |
||||
|
||||
{'data_set_name': '可以使用:fnd6_newqeventv110_cibegniq', 'description': '不可使用,仅供参考:Comp Inc - Beginning Net Income'} |
||||
{'data_set_name': '可以使用:fscore_bfl_total', 'description': '不可使用,仅供参考:The final score M-Score is a weighted average of both the Pentagon surface score and the Pentagon acceleration score.'} |
||||
{'data_set_name': '可以使用:anl4_netdebt_flag', 'description': '不可使用,仅供参考:Net debt - forecast type (revision/new/...)'} |
||||
{'data_set_name': '可以使用:nws12_afterhsz_tonhigh', 'description': '不可使用,仅供参考:Highest price reached during the session before the time of news'} |
||||
{'data_set_name': '可以使用:nws12_allz_result2', 'description': '不可使用,仅供参考:Percent change between the price at the time of the news release and the price at the close of the session'} |
||||
{'data_set_name': '可以使用:nws12_mainz_tonhigh', 'description': '不可使用,仅供参考:Highest price reached during the session before the time of news'} |
||||
{'data_set_name': '可以使用:nws18_sse', 'description': '不可使用,仅供参考:Sentiment of phrases impacting the company'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_a', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Total'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_l1_a', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Level 1'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_l1_q', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Level 1'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_l2_a', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Level 2'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_l2_q', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Level 2'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_l3_q', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Level 3'} |
||||
{'data_set_name': '可以使用:fn_liab_fair_val_q', 'description': '不可使用,仅供参考:Liabilities Fair Value, Recurring, Total'} |
||||
{'data_set_name': '可以使用:fn_treasury_stock_shares_a', 'description': '不可使用,仅供参考:Number of common and preferred shares that were previously issued and that were repurchased by the issuing entity and held in treasury on the financial statement date. This stock has no voting rights and receives no dividends.'} |
||||
========================= 数据字段结束 ======================================= |
||||
|
||||
以上数据字段和操作符, 按照Description说明组合, 但是每一个 alpha 组合的使用的数据字段和操作符不要过于集中, 在符合语法的情况下, 多尝试不同的组合 |
||||
@ -0,0 +1,100 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import glob |
||||
import os |
||||
import sys |
||||
import datetime |
||||
|
||||
sys.path.append(os.path.join(os.path.abspath(__file__).split('AlphaGenerator')[0] + 'AlphaGenerator')) |
||||
PROJECT_PATH = os.path.join(os.path.abspath(__file__).split('AlphaGenerator')[0] + 'AlphaGenerator') |
||||
|
||||
|
||||
def get_today_date(): |
||||
d = datetime.datetime.now().strftime('%Y-%m-%d') |
||||
today = { |
||||
'year': d.split('-')[0], |
||||
'month': d.split('-')[1], |
||||
'day': d.split('-')[2] |
||||
} |
||||
return today |
||||
|
||||
|
||||
def now_files(today): |
||||
create_new_file_path = os.path.join(PROJECT_PATH, 'merge_today_alphas', today['year'], today['month'], today['day']) |
||||
|
||||
os.makedirs(create_new_file_path, exist_ok=True) |
||||
|
||||
return create_new_file_path |
||||
|
||||
|
||||
def load_today_alphas(today_generated_alphas_path): |
||||
today_generated_alphas = [] |
||||
print(f"读取路径: {today_generated_alphas_path}") |
||||
|
||||
# 检查路径是否存在 |
||||
if not os.path.exists(today_generated_alphas_path): |
||||
print(f"警告: 路径不存在 {today_generated_alphas_path}") |
||||
return today_generated_alphas |
||||
|
||||
print(f"读取路径: {today_generated_alphas_path}") |
||||
|
||||
# 检查路径是否存在 |
||||
if not os.path.exists(today_generated_alphas_path): |
||||
print(f"警告: 路径不存在 {today_generated_alphas_path}") |
||||
return today_generated_alphas |
||||
|
||||
# 获取所有txt文件 |
||||
txt_files = glob.glob(os.path.join(today_generated_alphas_path, "*.txt")) |
||||
|
||||
if not txt_files: |
||||
print(f"提示: 未找到txt文件在 {today_generated_alphas_path}") |
||||
return today_generated_alphas |
||||
|
||||
print(f"找到 {len(txt_files)} 个txt文件") |
||||
|
||||
# 读取所有txt文件内容 |
||||
for txt_file in txt_files: |
||||
try: |
||||
with open(txt_file, 'r', encoding='utf-8') as f: |
||||
content = f.read().strip() |
||||
if content: |
||||
save_alphas = content.split('\n') |
||||
for save_alpha in save_alphas: |
||||
if save_alpha: |
||||
today_generated_alphas.append(save_alpha) |
||||
print(f"已读取: {os.path.basename(txt_file)}") |
||||
except Exception as e: |
||||
print(f"读取文件失败 {txt_file}: {e}") |
||||
|
||||
today_generated_alphas = list(set(today_generated_alphas)) |
||||
print(f"成功加载 {len(today_generated_alphas)} 个alpha代码") |
||||
return today_generated_alphas |
||||
|
||||
|
||||
def save_today_alphas(now_files_path, alphas, today): |
||||
# 生成年月日时分秒 |
||||
now_time = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S') |
||||
print(now_time) |
||||
save_file_name = f'merge_alphas_{now_time}.txt' |
||||
|
||||
# 保存到指定路径 |
||||
with open(os.path.join(now_files_path, save_file_name), 'w', encoding='utf-8') as f: |
||||
for alpha in alphas: |
||||
f.write(alpha + '\n\n') |
||||
print(f"已保存 {len(alphas)} 个alpha代码到 {save_file_name}") |
||||
|
||||
|
||||
def main(): |
||||
today = get_today_date() |
||||
today_generated_alphas_path = os.path.join(PROJECT_PATH, 'generated_alpha', today['year'], today['month'], today['day']) |
||||
alphas = load_today_alphas(today_generated_alphas_path) |
||||
if not alphas: |
||||
print("没有alpha代码需要保存") |
||||
return |
||||
|
||||
now_files_path = now_files(today) |
||||
|
||||
save_today_alphas(now_files_path, alphas, today) |
||||
|
||||
|
||||
if __name__ == '__main__': |
||||
main() |
||||
@ -1 +1 @@ |
||||
你是研究alpha量化因子的专业顾问 |
||||
你是研究alpha量化因子的专业顾问, 你现在要创建一个符合金融直觉的, 创新的金融逻辑, 以下是我之前写的, 可以作为参考, 但不禁止抄袭, 写一个新的金融逻辑 |
||||
@ -1,22 +1 @@ |
||||
**Name** |
||||
Institutional Investor Holding Divergence Factor |
||||
|
||||
**Hypothesis** |
||||
When major institutional investors within the same industry exhibit significant divergence in their positioning towards a specific stock, it indicates substantial uncertainty regarding the stock's future prospects. This divergence often arises when there are material, yet not fully digested, changes in fundamentals or news flow. In the short term, such divergence can lead to increased price volatility without a clear trend. However, over the medium term, as information becomes clearer, the stock price tends to converge towards the side representing the correct expectation. Therefore, a strategy can be constructed to establish positions when divergence reaches an extreme, betting on the subsequent information clarification and price convergence. |
||||
|
||||
**Implementation Plan** |
||||
1. **Data Preparation**: Collect and integrate institutional holding change data from regular company reports, focusing on top circulating shareholders identified as influential market participants. |
||||
2. **Calculate Divergence**: |
||||
* For each reporting period, calculate a divergence metric for each stock within its specific industry. This could be the standard deviation or Gini coefficient of the holding changes among different types of key institutions. |
||||
* Use the `ts_zscore` operator to cross-sectionally standardize this raw divergence metric, mitigating the impact of overall market sentiment swings. |
||||
* Apply a time-series decay operator to assign greater weight to more recent reporting periods, capturing the latest dynamics. |
||||
3. **Signal Generation**: Generate a signal when a stock's normalized, time-weighted divergence breaches a historical threshold. Consider establishing positions within a defined window after the signal appears. |
||||
4. **Position Direction**: This factor does not directly indicate long/short direction. Direction determination requires auxiliary indicators, such as: |
||||
* Concurrent stock price performance during the divergence period. |
||||
* Underlying fundamental trend to judge which institutional view might be more prescient. |
||||
|
||||
**Alpha Factor Optimization Suggestions** |
||||
1. **Dynamic Threshold Adjustment**: The significance of divergence may vary with market volatility. Consider adjusting the signal threshold dynamically. |
||||
2. **Differentiated Institutional Weighting**: Assign different weights to holding changes based on an institution's historical performance or AUM, refining the divergence metric to better reflect the博弈 of "smart money". |
||||
3. **Integration with Event Drivers**: Combine the divergence factor with the announcement timing of specific corporate events. High divergence during event windows might indicate stronger signals. |
||||
4. **Industry and Size Neutralization**: Divergence levels might be influenced by industry characteristics and company size. It is strongly recommended to apply cross-sectional neutralization in the final step of factor construction. |
||||
["mau", "dau", "active_user", "engagement_time", "session_duration", "user_retention", "churn_rate", "ltv", "cac", "arpu", "customer_acquisition", "user_growth", "revenue_growth", "digital_channel", "app_usage", "web_traffic", "conversion_rate", "stickiness", "viral_coefficient", "net_promoter_score", "customer_satisfaction", "subscription", "recurring_revenue", "monthly_revenue", "daily_revenue", "paying_user", "freemium", "in_app_purchase", "ad_revenue", "monetization", "customer_segment", "user_behavior", "page_view", "click_through_rate", "bounce_rate", "organic_traffic", "paid_traffic", "social_media", "community", "private_traffic", "kpi", "metric", "performance"] |
||||
@ -1,25 +1,3 @@ |
||||
Operator ts_product does not support event inputs |
||||
Operator ts_zscore does not support event inputs |
||||
Operator ts_mean does not support event inputs |
||||
Operator ts_scale does not support event inputs |
||||
Operator add does not support event inputs |
||||
Operator sign does not support event inputs |
||||
Operator subtract does not support event inputs |
||||
Operator ts_delta does not support event inputs |
||||
Operator ts_rank does not support event inputs |
||||
Operator greater does not support event inputs |
||||
Operator ts_av_diff does not support event inputs |
||||
Operator ts_quantile does not support event inputs |
||||
Operator ts_count_nans does not support event inputs |
||||
Operator ts_covariance does not support event inputs |
||||
Operator ts_arg_min does not support event inputs |
||||
Operator divide does not support event inputs |
||||
Operator ts_corr does not support event inputs |
||||
Operator multiply does not support event inputs |
||||
Operator if_else does not support event inputs |
||||
Operator ts_sum does not support event inputs |
||||
Operator ts_delay does not support event inputs |
||||
Operator group_zscore does not support event inputs |
||||
Operator ts_arg_max does not support event inputs |
||||
Operator ts_std_dev does not support event inputs |
||||
Operator ts_backfill does not support event inputs |
||||
ts_product ts_zscore ts_mean ts_scale add sign subtract ts_delta ts_rank greater ts_av_diff ts_quantile ts_count_nans ts_covariance |
||||
ts_arg_min divide ts_corr multiply if_else ts_sum ts_delay group_zscore ts_arg_max ts_std_de ts_backfill |
||||
以上这些操作符不能传入事件类型的数据集, 只能传入时间序列数据集 |
||||
@ -1,58 +1,20 @@ |
||||
ts_decay_linear(multiply(ts_delta(fscore_bfl_total,20),sign(subtract(nws18_sse,ts_quantile(nws18_sse,30)))),60) |
||||
normalize(winsorize(group_neutralize(divide(fnd6_capxv,ts_sum(fnd6_ciother,15)),pv13_h2_min2_1k_sector),2)) |
||||
rank(multiply(sqrt(abs(ts_av_diff(fnd6_newqeventv110_cibegniq,30))),reverse(fn_def_tax_assets_liab_net_q))) |
||||
if_else(nws18_sse>ts_mean(nws18_sse,40),ts_rank(fscore_total,35),reverse(ts_rank(fnd6_newqv1300_ciotherq,45))) |
||||
group_scale(multiply(abs(ts_delta(sales_ps,10)),sign(ts_corr(fscore_bfl_total,sales_ps,60))),pv13_h_min24_500_sector) |
||||
zscore(add(ts_zscore(fnd6_eventv110_gdwliepsq,40),reverse(divide(fn_liab_fair_val_l1_q,ts_mean(fn_liab_fair_val_l2_q,30))))) |
||||
ts_mean(multiply(hump(ts_delta(fscore_total,25),0.02),group_rank(nws18_sse,pv13_h_min52_1k_sector)),40) |
||||
subtract(ts_zscore(fnd6_newqv1300_spceepsp12,60),winsorize(multiply(fn_treasury_stock_shares_a,news_max_up_amt),3)) |
||||
multiply(signed_power(ts_av_diff(fnd6_cisecgl,20),1.5),group_neutralize(sign(nws18_sse),pv13_h_min22_1000_sector)) |
||||
scale(if_else(sales_ps>ts_quantile(sales_ps,45),ts_decay_linear(fscore_bfl_total,50),reverse(fscore_total)),2) |
||||
ts_rank(add(divide(fnd6_newqeventv110_gdwliaq,ts_mean(fnd6_newqeventv110_gdwlipq,25)),abs(nws18_sse)),60) |
||||
normalize(group_neutralize(multiply(ts_delta(fn_def_tax_liab_a,15),sign(subtract(sales_ps,ts_min(sales_ps,25)))),pv13_h_min2_focused_sector)) |
||||
winsorize(multiply(ts_covariance(fscore_total,nws18_sse,35),sqrt(abs(ts_std_dev(fnd6_capxv,20)))),2) |
||||
reverse(ts_zscore(divide(ts_sum(fnd6_newqv1300_ciderglq,30),fscore_bfl_total),90)) |
||||
group_rank(multiply(add(ts_mean(sales_ps,35),fn_liab_fair_val_l2_q),sign(ts_delta(nws18_sse,15))),pv13_h2_min2_1k_sector) |
||||
multiply(ts_backfill(ts_av_diff(fnd6_eventv110_gdwlieps12,25),20),hump(sign(sales_ps),0.01)) |
||||
zscore(subtract(group_neutralize(fscore_total,pv13_h_min24_500_sector),divide(news_max_up_amt,ts_mean(news_max_up_amt,30)))) |
||||
ts_decay_linear(if_else(fn_liab_fair_val_l1_a>ts_quantile(fn_liab_fair_val_l1_a,30),sales_ps,reverse(fnd6_ciother)),70) |
||||
rank(winsorize(add(ts_corr(sales_ps,fscore_bfl_total,75),group_rank(fnd6_newqeventv110_spcedq,pv13_h_min52_1k_sector)),3)) |
||||
reverse(ts_zscore(fnd6_capxv, 252)) |
||||
|
||||
ts_delta(group_rank(zscore(fnd6_capxv), pv13_h_min2_focused_sector), 21) |
||||
|
||||
group_neutralize(ts_scale(rank(forward_price_120), 63), pv13_h_min22_1000_sector) |
||||
|
||||
if_else(fnd6_newqv1300_ciderglq > fnd6_newqeventv110_cibegniq, reverse(rank(sales_ps)), zscore(fnd6_newqv1300_ciotherq)) |
||||
|
||||
ts_backfill(group_zscore(log(abs(fnd6_eventv110_gdwliepsq)), pv13_h_min24_500_sector), 22) |
||||
|
||||
multiply(sign(fnd6_newqeventv110_spcedq), fnd6_newqv1300_spceepsp12) |
||||
|
||||
subtract(rank(fn_liab_fair_val_l1_q), rank(fn_liab_fair_val_l2_q)) |
||||
|
||||
divide(min_reported_eps_guidance, fnd6_cisecgl) |
||||
|
||||
group_scale(multi_factor_acceleration_score_derivative, pv13_h_min52_1k_sector) |
||||
|
||||
group_backfill(fn_op_lease_min_pay_due_in_2y_a, pv13_h2_min2_1k_sector, 42) |
||||
|
||||
add(fscore_bfl_total, fscore_total) |
||||
|
||||
if_else(fn_treasury_stock_shares_a > 0, news_max_up_amt, nws18_sse) |
||||
|
||||
power(zscore(log(abs(fnd6_newqeventv110_gdwlipq))), 0.5) |
||||
|
||||
winsorize(fnd6_newqeventv110_gdwliaq) |
||||
|
||||
signed_power(fnd6_eventv110_gdwlieps12, 2) |
||||
|
||||
is_nan(fnd6_newqv1300_ciotherq) |
||||
|
||||
kth_element(fn_def_tax_liab_a, 126, 3) |
||||
|
||||
normalize(fnd6_capxv) |
||||
|
||||
days_from_last_change(quantile(fn_liab_fair_val_l1_a, "gaussian")) |
||||
|
||||
vec_avg(bucket(rank(forward_price_120), range="0, 1, 0.2")) |
||||
group_zscore(ts_rank(add(ts_delta(fscore_bfl_total,20),ts_zscore(nws18_sse,60)),252),anl4_netdebt_flag) |
||||
ts_zscore(multiply(ts_rank(subtract(nws12_allz_result2,nws12_mainz_tonhigh),120),sign(ts_delta(fnd6_newqeventv110_cibegniq,30))),60) |
||||
group_rank(multiply(ts_scale(ts_corr(nws18_sse,fscore_bfl_total,90),90),sqrt(abs(ts_delta(nws12_afterhsz_tonhigh,60)))),anl4_netdebt_flag) |
||||
ts_rank(add(ts_zscore(fscore_bfl_total,180),divide(ts_mean(nws12_allz_result2,60),ts_std_dev(nws12_mainz_tonhigh,60))),252) |
||||
group_zscore(subtract(ts_power(abs(ts_delta(fnd6_newqeventv110_cibegniq,45)),0.7),ts_av_diff(nws18_sse,90)),anl4_netdebt_flag) |
||||
multiply(ts_rank(ts_covariance(nws12_afterhsz_tonhigh,nws18_sse,120),180),group_scale(sign(ts_delta(fscore_bfl_total,20)),anl4_netdebt_flag)) |
||||
ts_zscore(add(ts_mean(multiply(nws12_allz_result2,nws18_sse),60),ts_rank(fnd6_newqeventv110_cibegniq,90)),120) |
||||
group_rank(ts_scale(subtract(ts_max(ts_mean(nws12_mainz_tonhigh,30),ts_mean(nws12_afterhsz_tonhigh,30)),ts_min(fscore_bfl_total,fn_liab_fair_val_q)),180),anl4_netdebt_flag) |
||||
ts_rank(multiply(ts_zscore(nws18_sse,60),signed_power(ts_delta(fscore_bfl_total,60),1.2)),252) |
||||
group_zscore(add(ts_decay_linear(nws12_allz_result2,90),ts_quantile(ts_delta(fn_liab_fair_val_a,30),60)),anl4_netdebt_flag) |
||||
subtract(ts_rank(ts_mean(fscore_bfl_total,90),180),group_scale(divide(nws18_sse,abs(ts_delta(nws12_mainz_tonhigh,20))),anl4_netdebt_flag)) |
||||
ts_zscore(multiply(sqrt(ts_sum(abs(nws12_allz_result2),60)),sign(ts_corr(fnd6_newqeventv110_cibegniq,nws18_sse,120))),90) |
||||
group_rank(ts_power(ts_rank(ts_av_diff(fscore_bfl_total,60),120),0.8),anl4_netdebt_flag) |
||||
multiply(ts_zscore(subtract(nws18_sse,ts_delay(nws18_sse,30)),60),ts_rank(fn_liab_fair_val_l2_q,90)) |
||||
ts_rank(add(ts_corr(fscore_bfl_total,fn_liab_fair_val_a,180),ts_scale(nws12_afterhsz_tonhigh,60)),252) |
||||
group_zscore(multiply(ts_delta(ts_mean(nws12_mainz_tonhigh,45),15),inverse(ts_std_dev(fnd6_newqeventv110_cibegniq,60))),anl4_netdebt_flag) |
||||
add(ts_zscore(fscore_bfl_total,120),group_rank(ts_quantile(nws12_allz_result2,90),anl4_netdebt_flag)) |
||||
ts_rank(multiply(ts_backfill(nws18_sse,30),ts_delta(ts_covariance(fn_liab_fair_val_q,fscore_bfl_total,60),30)),180) |
||||
group_scale(subtract(ts_max(ts_zscore(nws12_afterhsz_tonhigh,60),ts_zscore(nws12_mainz_tonhigh,60)),ts_min(fnd6_newqeventv110_cibegniq,fn_liab_fair_val_l3_q)),anl4_netdebt_flag) |
||||
ts_zscore(multiply(ts_rank(nws18_sse,252),log(abs(add(fscore_bfl_total,1)))),180) |
||||
Loading…
Reference in new issue