BRAIN论坛Alpha模板精华总结
本文档旨在系统性地整理和总结优秀Alpha模板,它是一种可复用的标准化框架性表达式,它承载着特定的经济逻辑,并预留出若干 “配置项”(包括数据字段、算子、分组方式、衰减规则、中性化方案等),用于生成多个候选阿尔法因子。其典型流程为:数据清洗(数据回填、缩尾处理)→ 跨时间或跨标的维度进行转换 / 对比 → 排序 / 中性化处理 →(可选步骤)衰减调整 / 换手率优化。这种模板模式能够推动系统化的因子挖掘、复用与多元化配置,同时确保每一个因子都具备清晰可追溯的经济逻辑支撑。
以下每个模板都附有其核心思想、变量说明、适用场景及原帖链接,方便您理解、应用和进一步探索。
使用时请思考如何将下列模板与有的Alpha表达式结合,创造出新的模板来捕捉和发现市场规律,找到”好“公司和”坏“公司
使用前请注意:
- 过拟合风险:部分模板可能存在过拟合风险,请谨慎使用,并结合IS-Ladder测试、多市场回测等方法进行验证。
- 参数调整:模板中的参数(如时间窗口、数据集字段)需要根据您的具体研究目标和数据特性进行调整。
- 持续学习:最好的模板是您自己创造的。希望本文档能激发您的灵感,而不是限制您的思维。
From: Alpha Examples from Learn101
Momentum after news
Hypothesis: After news is released, if a stock takes a longer time to rise, it may show strong evidence of upward momentum, and it could be beneficial to take a long position in it.
Expression: ts_backfill(vec_avg(nws12_prez_4l),504)
Settings: Region: USA, Universe: TOP500, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 时序相对性 (Step 4): 这是一个典型的时序信号。
ts_backfill 的使用暗示了新闻数据是稀疏的(Step 4.2.4),需要填补空白以维持信号连续性。
- 算子深意:
vec_avg 用于聚合多维新闻向量,提取核心情绪/强度;ts_backfill 确保在无新闻日也能维持上一次的观点,直到新消息到来。
优化方向:
- 去噪 (Step 0): 新闻情绪可能存在极端噪音,建议在
vec_avg 后增加 winsorize 或 rank。
- 从属信号 (Subordinate): 叠加
Social Media Effect。若新闻情绪好但社媒热度低(噪音少),则放大权重;若社媒过热,可能反转。
- 门限交易 (Step 5): 仅在新闻情绪显著偏离均值时交易,如
trade_when(abs(zscore(news)) > 1.5, ...)。
Pretax Income
Hypothesis: Pretax income is a good measure of a company's financial health and profitability.
Expression: quantile(ts_rank(pretax_income,250))
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 4, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
逻辑链深度解析:
- 时序相对性 (Step 4):
ts_rank(..., 250) 比较当前收入与过去一年的水平,寻找“自身改善”而非“绝对高收入”。
- 分布重塑 (Step 0):
quantile 强制将信号拉伸为均匀分布,避免了极值影响,只关注相对排序。
优化方向:
- 区间优化 (Step 2): 收入微弱变化可能只是噪音。可改用
ts_zscore 并只在 >1 或 <-1 时交易。
- 从属信号: 引入
market_cap。大市值的收入创新高可能比小市值更稳健(质量溢价)。
Operating Earnings Yield
Hypothesis: If the operating income of a company is currently higher than its past 1 year history, buy the company's stock and vice-versa.
Expression: ts_rank(operating_income,252)
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SUBINDUSTRY, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 时序相对性 (Step 4): 纯粹的时序动量逻辑。
ts_rank 将当前值映射到历史分位,捕捉“业绩改善”趋势。
优化方向:
- 组内比较 (Step 3): 考虑行业周期性。先做
group_zscore(operating_income, industry) 再做 ts_rank,剔除行业景气度影响,只看个股相对行业的改善。
- 门限 (Step 5):
trade_when(ts_rank > 0.8, ...) 只做多业绩显著改善的股票。
Appreciation of liabilities
Hypothesis: An increase in the fair value of liabilities could indicate a higher cost than expected.
Expression: -ts_rank(fn_liab_fair_val_l1_a,252)
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SUBINDUSTRY, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 反向信号: 负号
- 表示这是一个反向指标(负债增加是坏事)。
- 时序相对性: 同样基于
ts_rank,关注负债相对于自身历史的增长速度。
优化方向:
- 去噪: 负债数据可能存在跳变,建议先
winsorize。
- 从属信号: 结合
cash_flow。若负债增加但现金流同时也大幅增加(良性杠杆),则不应做空。
Deferred Revenue
Hypothesis: Firms with high deferred revenue will surprise the market in the future when the deferred revenue is recognized.
Expression: ts_backfill(fnd6_drc, 252)/assets
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SECTOR, Truncation: 1, Pasteurization: ON
逻辑链深度解析:
- 截面比较 (Step 3): 除以
assets 是为了标准化(Size Adjustment),使其在截面上可比。
- 数据填补 (Step 0):
ts_backfill 处理财报数据的低频更新特性。
优化方向:
- 行业中性 (Step 3): 递延收入在软件/服务业常见,在制造业少见。必须做
group_zscore(..., sector) 或 neutralize,否则只是在做多特定行业。
- 时序变化 (Step 4): 关注递延收入的 增长率
ts_delta,而不仅仅是绝对值。
Reducing debt
Hypothesis: Take a long position in companies whose debt has decreased compared to the past.
Expression: -ts_quantile(debt, 126)
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
逻辑链深度解析:
- 时序相对性:
ts_quantile 与 ts_rank 类似,捕捉债务下降趋势。
优化方向:
- 从属信号: 结合
interest_coverage (利息保障倍数)。只有在偿债能力弱的公司中,债务减少才最重要(困境反转逻辑)。
Power of leverage
Hypothesis: Companies with high liability-to-asset ratios often leverage debt as a strategic tool.
Expression: liabilities/assets
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: MARKET, Truncation: 0.01, Pasteurization: ON
逻辑链深度解析:
- 截面比较 (Step 3): 这是一个经典的截面因子(杠杆率)。
优化方向:
- 非线性 (Step 1): 杠杆通常是倒U型关系(适度杠杆好,过高杠杆坏)。考虑使用
bucket 分段,或 trade_when 剔除极端高杠杆。
- 行业中性: 银行/地产杠杆天生高,必须行业中性化。
From: Alpha Examples from Learn102
Social Media Effect
Hypothesis: Poorly performing stocks are discussed more in general on social media platforms.
Expression: -scl12_buzz
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.01, Pasteurization: ON
逻辑链深度解析:
- 反向指标: 负号暗示“关注度高=坏事”(可能是负面新闻缠身)。
- 原始信号: 直接使用
buzz,假设线性关系。
优化方向:
- 去噪 (Step 0): 社媒数据极值多,必须
log 或 winsorize。
- 从属信号: 结合
sentiment。若关注度高且情感为正,可能是好事;关注度高且情感负,才是做空机会。
- 门限:
trade_when(rank(buzz) > 0.9, ...) 只在极度热门时做空。
Valuation Disconnect Swing Short
Hypothesis: A stock with high momentum and value score correlation suggests a disconnect between the stock's price and its intrinsic value.
Expression: -ts_corr(ts_backfill(fscore_momentum,66),ts_backfill(fscore_value,66),756)
Settings: Region: USA, Universe: TOP200, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 高阶统计量: 使用
ts_corr 捕捉两个因子之间的动态关系,而非因子本身。
- 逻辑: 动量与价值相关性高,意味着价格脱离基本面(泡沫),因此做空(负号)。
优化方向:
- 窗口调整: 756天(3年)非常长,捕捉的是长期结构变化。可尝试短窗口(如126天)捕捉短期背离。
Network Dependence
Hypothesis: Long stocks of companies whose hub score of customers are low over the past two years.
Expression: -ts_mean(pv13_ustomergraphrank_hub_rank,504)
Settings: Region: USA, Universe: TOP1000, Delay: 1, Decay: 0, Neutralization: INDUSTRY, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 供应链逻辑: 客户集中度/中心度过高可能意味着风险(依赖大客户)。
- 平滑 (Step 4):
ts_mean(..., 504) 说明这是一个非常慢的变量,关注长期结构。
优化方向:
- 从属信号: 结合
volatility。高依赖度+高波动 = 极度危险。
From: Alpha Examples from Learn103
News-driven Volatility
Hypothesis: Stocks of companies that face high differences in their prices after any news release can be subject to varying sentiments.
Expression: (ts_arg_max(ts_backfill(news_session_range, 20), 60))
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 0, Neutralization: SECTOR, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 事件驱动 (Step 4.2.3):
ts_arg_max 寻找过去60天内波动最大的那一天(新闻日)。
- 算子深意: 这不是直接用波动率,而是用“最大波动发生的时间距离”作为信号。
优化方向:
- 衰减逻辑: 结合
days_from_last_change 或 exp_decay,让信号随时间减弱。
- 从属信号: 叠加
IV Skew。若波动大且 Skew 偏空,做空;若 Skew 偏多,做多。
Implied Volatility Spread as a predictor
Hypothesis: If the Call Open interest is higher than the Put Open interest, the stock may rise based on the intensity of the implied volatility spread.
Expression: trade_when(pcr_oi_270 < 1, (implied_volatility_call_270-implied_volatility_put_270), -1)
Settings: Region: USA, Universe: TOP3000, Delay: 1, Decay: 4, Neutralization: MARKET, Truncation: 0.08, Pasteurization: ON
逻辑链深度解析:
- 门限交易 (Step 5):
trade_when(pcr_oi < 1, ...) 是典型的门禁逻辑。只有在看涨持仓量大于看跌时(情绪偏多),才使用 IV Spread 信号。
- 条件分支: 不满足条件时给
-1(做空),这是一个激进的二元策略。
优化方向:
- 平滑: IV 数据跳动大,建议对 Spread 做
ts_mean 或 ts_decay_linear。
《151 Trading Strategies》论文精华模板
本部分总结自Zura Kakushadze与Juan Andrés Serur合著的《151 Trading Strategies》一文,重点提炼其中适用于BRAIN平台的股票类策略,并将其泛化为可复用的Alpha模板。
1. 风险调整后动量模板 (Risk-Adjusted Momentum)
- 模板表达式:
ts_mean(ts_delay(returns, <skip_period>), <lookback_period>) / ts_std_dev(ts_delay(returns, <skip_period>), <lookback_period>)
- 核心思想: 这是对经典动量因子的改进。它计算的是过去一段时间(lookback_period)的"时序夏普比率",即收益均值除以收益波动。同时,
ts_delay跳过了最近一段时间(skip_period,通常为21天/1个月)的数据,以规避短期反转效应的干扰。该因子旨在寻找那些"高质量"的、持续且平稳的动量。
- 变量说明:
<skip_period>: 跳过的近期交易日数,如 21。
<lookback_period>: 计算动量的回看窗口,如 252。
- 适用场景: 通用性强,适用于构建稳健的动量类Alpha。
- 逻辑链深度解析:
- 时序标准化 (Step 4): 分子是收益均值,分母是波动率。本质是 Rolling Sharpe Ratio。
- 去噪 (Step 0):
ts_delay 跳过最近一个月,剔除了短期反转(Short-term Reversal)噪音,只保留中长期动量。
- 优化方向:
- 从属信号: 叠加
turnover。在低换手率时,动量更可靠(量价配合)。
- 残差化: 先对 returns 做
regression_neut 剔除大盘影响,计算纯特异性动量。
- 适配自: Section 3.1, "Price-momentum",
Rrisk.adj
2. 标准化盈利超预期模板 (SUE - Standardized Unexpected Earnings)
- 模板表达式:
(fnd_eps_q - ts_delay(fnd_eps_q, 4)) / ts_std_dev(fnd_eps_q - ts_delay(fnd_eps_q, 4), 8)
- 核心思想: 捕捉超预期的盈利增长。它计算的是最新一季的EPS相较于去年同期的增量,并用该增量自身过去8个季度的波动性进行标准化。标准化后的值(SUE)越高,代表盈利惊喜越大,是经典的盈利动量因子。
- 变量说明:
fnd_eps_q: 季度每股收益(EPS)字段。
- 适用场景:
Fundamental(基本面)数据集,用于事件驱动型Alpha。
- 逻辑链深度解析:
- 季节性调整:
ts_delay(..., 4) 比较同比季度,消除季节性影响。
- 波动率标准化 (Step 0): 除以过去8季度的波动,将“惊喜”转化为标准差单位(Z-Score),使其在不同波动率的公司间可比。
- 优化方向:
- 事件衰减 (Step 4): 叠加
days_from_last_change,让 SUE 信号随财报发布时间衰减。
- 从属信号: 叠加
Analyst Revision。若 SUE 高且分析师上调预期,信号更强。
- 适配自: Section 3.2, "Earnings-momentum", SUE
4. 隐含波动率偏斜动量模板 (Implied Volatility Skew Momentum)
- 模板表达式:
ts_delta(implied_volatility_call_<window>, <period>) - ts_delta(implied_volatility_put_<window>, <period>)
- 核心思想: 捕捉市场情绪的变化。看涨期权IV的上升通常与乐观情绪相关,而看跌期权IV的上升则与悲观或避险情绪相关。该模板计算Call IV的变化量与Put IV变化量之差,旨在做多情绪改善、做空情绪恶化的股票。
- 变量说明:
implied_volatility_call_<window>: 不同期限的看涨期权隐含波动率。
implied_volatility_put_<window>: 不同期限的看跌期权隐含波动率。
<period>: 计算IV变化的时间窗口,如 21 (月度变化)。
- 适用场景:
Option(期权)数据集,用于捕捉短中期市场情绪变化。
- 逻辑链深度解析:
- 时序变化 (Step 4): 关注的是 IV 的 变化 (
ts_delta) 而非绝对值。
- 情绪差: Call IV 涨幅 > Put IV 涨幅 -> 情绪改善。
- 优化方向:
- 门限:
trade_when(abs(skew_delta) > threshold, ...) 只在情绪剧烈变化时交易。
- 事件驱动: 在财报前(IV 高企时)该策略可能失效,需用
days_to_earnings 过滤。
- 适配自: Section 3.5, "Implied volatility"
5. 残差动量模板 (Residual Momentum)
- 模板表达式:
ts_mean(regression_neut(regression_neut(regression_neut(returns, <factor_1/>), <factor_2/>), <factor_3/>), <window/>)
- 核心思想: 提纯动量信号。传统动量可能包含了市场Beta、市值、价值等多种因子的敞口。此模板通过连续的中性化(例如依次对
<factor_1/>, <factor_2/>, <factor_3/>执行regression_neut)剥离可被通用因子解释的部分,然后仅对无法被解释的"残差等价物"部分计算动量。
- 变量说明:
<factor_1/>, <factor_2/>, <factor_3/>: 市场通用因子,如 mkt_beta, size_factor, value_factor。
<window/>: 计算残差动量的时间窗口。
- 适用场景: 通用性强,是因子提纯、构建高质量Alpha的关键步骤。
- 逻辑链深度解析:
- 提纯 (Step 0): 通过连续
regression_neut 剥离 Beta、Size、Value 等风格暴露。
- 时序动量: 对剥离后的残差求
ts_mean。
- 优化方向:
- 加权: 使用
ts_decay_linear 代替 ts_mean,给予近期残差更大权重。
- 组内比较: 在残差基础上再做
group_rank,寻找行业内最强特异动量。
- 适配自: Section 3.7, "Residual momentum"
6. 风险加权回归均值回归模板 (Weighted Regression Mean-Reversion)
- 模板表达式:
reverse(regression_neut(multiply(returns, power(inverse(ts_std_dev(returns, <window/>)), 2)), <group_matrix/>))
- 核心思想: 这是对标准行业中性化均值回归的增强。在对收益率进行行业中性化时,它为不同股票赋予了不同的权重。具体来说,它给历史波动率较低的股票更高的权重,认为这些股票的收益率数据更"可靠",在计算行业均值时应占更大比重。
- 变量说明:
<group_matrix>: 行业或分组的哑变量矩阵。
weights: 回归权重,通常是可靠性的度量,如 1/variance。
<window>: 计算波动率的时间窗口。
- 适用场景: 适用于任何需要进行组内中性化或回归剥离的场景,尤其是当组内成员的信号质量或波动性差异较大时。
- 逻辑链深度解析:
- 加权最小二乘 (WLS): 使用
1/variance 作为权重,认为低波动的股票信息更可靠。
- 均值回归:
reverse 捕捉残差的反转。
- 优化方向:
- 从属信号: 引入
liquidity 权重。流动性好的股票回归更快。
- 适配自: Section 3.10, "Mean-reversion – weighted regression"
7. 移动平均线交叉模板 (Moving Average Crossover)
- 模板表达式:
sign(ts_mean(<price/>, <short_window>) - ts_mean(<price/>, <long_window>))
- 核心思想: 经典的趋势跟踪策略。当短期均线上穿长期均线("金叉")时,表明短期趋势走强,产生买入信号。当短期均线下穿长期均线("死叉")时,表明趋势走弱,产生卖出信号。
- 变量说明:
<price/>: close, vwap 等价格字段。
<short_window>: 短期均线窗口,如 10, 20。
<long_window>: 长期均线窗口,如 50, 100。
- 适用场景: 适用于趋势性较强的市场或资产。
- 逻辑链深度解析:
- 低通滤波: MA 本质是滤除高频噪音。
- 二元信号:
sign 输出 +1/-1,不包含强度信息。
- 优化方向:
- 连续化 (Step 1): 去掉
sign,直接使用差值并标准化 (zscore),保留强度信息。
- 从属信号: 结合
ADX (趋势强度指标)。只有在趋势强时才使用 MA 交叉。
- 适配自: Section 3.12, "Two moving averages"
9. 渠道突破模板 (Channel Breakout)
- 模板表达式:
alpha = if_else(greater(close, ts_max(high, <window/>)), 1, if_else(less(close, ts_min(low, <window/>)), -1, 0)); reverse(alpha)
- 核心思想: 这是一个经典的反转策略。它定义了一个由过去N日最高价和最低价构成的价格渠道(Channel)。当价格向上突破渠道上轨时,认为市场过热,产生卖出信号(-1);当价格向下突破渠道下轨时,认为市场超卖,产生买入信号(+1)。
- 变量说明:
<window>: 定义渠道的时间窗口,如 20。
- 适用场景: 适用于有均值回归特性的市场或个股。
- 逻辑链深度解析:
- 区间突破 (Step 2): 典型的“只在尾部交易”逻辑。中间区间为 0。
- 反转逻辑:
reverse 赌突破是假突破(False Breakout)。
- 优化方向:
- 顺势/逆势切换: 结合
volatility。低波时做反转(假突破),高波时做顺势(真突破)。
- 适配自: Section 3.15, "Channel"
11. 价值因子基础模板 (Value Factor)
- 模板表达式:
group_rank(<book_value/> / <market_cap/>)
- 核心思想: 经典的价值投资策略。它旨在买入账面价值相对于市场价值被低估的"价值股",并卖出被高估的"成长股"。最核心的衡量指标是账面市值比(Book-to-Price / Book-to-Market Ratio)。
- 变量说明:
<book_value/>: 公司账面价值或每股净资产字段。
<market_cap/>: 公司市值或收盘价字段。
- 适用场景:
Fundamental (基本面) 数据集,作为构建多因子模型的基础因子之一。
- 逻辑链深度解析:
- 组内比较 (Step 3): 价值因子在不同行业间不可比(如科技 vs 银行),必须用
group_rank。
- 优化方向:
- 去噪: 先
winsorize 再 group_rank。
- 从属信号: 叠加
Quality (ROE)。避免买入“价值陷阱”(便宜但烂的公司)。
- 适配自: Section 3.3, "Value"
13. 配对交易均值回归框架 (Pairs Trading)
- 模板表达式:
signal_A = (close_A - close_B) - ts_mean(close_A - close_B, <window>); reverse(signal_A)
- 核心思想: 寻找历史上高度相关的两只股票(一个"配对"),当它们的价差(spread)偏离历史均值时进行套利。如果价差过大,则做空价高的股票、做多价低的股票,赌价差会回归。这是一个经典的统计套利和均值回归策略。
- 变量说明:
close_A, close_B: 配对股票A和B的价格序列。
<window>: 计算历史价差均值的时间窗口。
- 适用场景: 适用于同一行业内业务高度相似的公司,是构建市场中性策略的基础。
- 逻辑链深度解析:
- 协整关系: 构造平稳序列
Spread。
- 均值回归: 赌 Spread 回归均值。
- 优化方向:
- 动态阈值: 使用
ts_std_dev(Spread) 设定动态开仓线(如 2倍标准差)。
- 止损: 增加
trade_when(abs(Spread) > 4*std, 0, ...) 防止协整破裂。
- 适配自: Section 3.8, "Pairs trading"
补充模板
A. Analyst交叉分组打底(模板名:示例)
- 核心结构:
financial_data = ts_backfill(<vec_func/>(<analyst_metric/>), 60); gp = group_cartesian_product(country, industry); <ts_operator/>(<group_operator/>(financial_data, gp), <window/>)
- 思想: 先对分析师字段做向量聚合(
vec_avg、vec_kurtosis、vec_ir等),用group_cartesian_product构建国家×行业组合,再做组内标准化/中性化+时序处理,形成稳定的截面信号。
- 变量要点:
analyst_metric覆盖mdl26_*、star_arm_*等Analyst/SmartEstimate场景;vec_func选择聚合方式;group_operator用于行业/国家组内的scale或neutralize;ts_operator用于时间平滑(ts_mean、ts_zscore等);window在20/60/90/200之间取值。
- 适用场景: 适合Analyst情感、预期修正类主题,想要跨国+行业分组的稳健截面信号。
- 逻辑链深度解析:
- 数据填补 (Step 0): 分析师数据稀疏,必须
ts_backfill。
- 精细分组 (Step 3):
group_cartesian_product 实现了“国家x行业”的精细化中性化,适合全球策略。
- 优化方向:
- 算子选择:
vec_ir (信息比率) 比 vec_avg 更能体现分析师的一致性。
B. 双重中性化(模板名:双重中性化:以Analyst15为例)
- 核心结构: 与上类似,先
ts_backfill(vec_func(Analyst15字段), 60),再按国家×行业分组,做组内中性化与时序处理。
- 思想: 针对
anl15_*增长/估值/分红等字段,在截面层面做两次中性化(向量聚合后+组内处理),用于剥离共性行业/国家暴露。
- 变量要点: 数据集中
anl15_*覆盖多期增长率、PE、估值、分红等;vec_func与ts_operator选择决定信号平滑度;窗口建议60–200以保证填补稳定。
- 适用场景: Analyst15预期修正、估值再定价类信号,需要同时消化国家+行业噪音的场景。
- 逻辑链深度解析:
- 多重剥离: 彻底消除风格暴露,追求纯 Alpha。
- 优化方向:
- 顺序: 先做行业中性,再做国家中性,通常更符合基本面逻辑。
C. 组间比较(模板名:组间比较_GLB_topdiv)
- 核心结构: 先在
country × <group1/>分组内对回填后的向量聚合结果做ts_zscore和group_zscore,再计算组均值/极值(group_min/median/max/sum/count),用resid = <compare/>(alpha, alpha_gpm)求组间残差,最后再做组内+时序处理。
- 思想: 对同一层级(如行业/子行业/交易所)之间的相对强弱做剥离,得到“相对组均值”的残差信号,适合跨组对比的Alpha挖掘。
- 变量要点:
analyst_field来源于fnd8_*基本面/现金流字段;vec_op可选vec_max/avg/min;compare可用regression_neut或signed_power提取残差;t_window取20/60/200/600,控制平滑与稳定性。
- 适用场景: GLB区域的分红/现金流因子(topdiv)在国家+行业框架下的相对价值比较,关注跨组差异的策略。
- 逻辑链深度解析:
- 相对价值: 关注的是“我在我的组里是否优秀”,而不是“我绝对值多少”。
- 优化方向:
- 非线性: 使用
rank 代替原始值计算残差,对异常值更鲁棒。
D. 组间比较(Analyst15版,模板名:组间比较_glb_topdiv_anl15)
- 核心结构: 与上一模板相同,但
analyst_field替换为anl15_*系列的增长/估值/分红字段。
- 思想: 通过对Analyst15增长与估值预期的组间残差建模,捕捉行业/国家层面的相对高低估与预期修正。
- 变量要点:
group1可选industry/subindustry/sector/exchange;compare与group_stats同上;ts_op和group_op用于残差后再标准化和时序平滑。
- 适用场景: 全球范围GLB,基于Analyst15预期数据的组间相对价值或动量信号。
- 逻辑链深度解析:
- 优化方向:
- 时序叠加: 结合
ts_delta,寻找“行业内预期提升最快”的股票。
E. 顾问分析示例(模板名:顾问分析示例)
- 核心结构:
financial_data = ts_backfill(<mixdata/>, 90); gp = industry; <ts_operator/>(<group_operator/>(financial_data, gp), <window/>)
- 思想: 直接对
anl69_*多字段做90日回填,行业组内标准化后再做时序平滑,生成简洁的行业中性信号。
- 变量要点:
mixdata覆盖anl69_*的EPS/EBIT/现金分红/目标价/报告日期等;ts_operator可用ts_zscore、ts_scale、ts_rank等;window提供60/120/220/600可调节频率。
- 适用场景: Analyst69数据驱动的行业内预期跟踪、财报节奏/指引变化监控。
- 逻辑链深度解析:
- 标准流程: 填补 -> 截面标准化 -> 时序平滑。这是构建稳健因子的标准三板斧。
- 优化方向:
- 事件驱动: 在财报日前后缩短
ts_mean 的窗口,提高灵敏度。
新增模板(CAPM與估值、分析師期限、期權、搜尋優化)
1. CAPM殘差模板(市場/行業中性收益)
- 表達式:
ts_regression(returns, group_mean(returns, log(ts_mean(cap,21)), sector), 252, rettype=0)。
- 核心思想: 回歸剔除市場/行業暴露,保留超額收益殘差作為Alpha。
- 適用場景: 通用起手式,回歸殘差可作後續動量或價值信號的底板。
- 優化: 改
rettype=2獲取beta斜率,用於風險排序或低/高beta組合;可加入winsorize、ts_backfill預處理。
2. CAPM廣義殘差(任意特徵)
- 表達式:
data = winsorize(ts_backfill(<data>,63), std=4); gpm = group_mean(data, log(ts_mean(cap,21)), sector); resid = ts_regression(data, gpm, 252, rettype=0)。
- 核心思想: 將任意特徵去除組均值成分,提取行業相對的特異性部分。
- 適用場景: 基本面、情緒、替代數據的組內殘差提純。
- 優化: 先
group_zscore再回歸;對resid再做ts_zscore或ts_mean平滑。
3. CAPM Beta排序模板
- 表達式:
target_data = winsorize(ts_backfill(<target>,63), std=4); market_data = winsorize(ts_backfill(<market>,63), std=4); beta = ts_regression(target_data, group_mean(market_data, log(ts_mean(cap,21)), sector), 252, rettype=2)。
- 核心思想: 提取行業內相對beta,作為風險/防禦排序;低beta偏防禦,高beta偏進攻。
- 優化: 行業或國家分組;可按beta分桶做長低/短高,或反向用於高波段套利。
4. 實際-預估差異模板(Analyst Surprise)
- 表達式:
group_zscore(subtract(group_zscore(<act>, industry), group_zscore(<est>, industry)), industry)。
- 核心思想: 行業內標準化後的實際值與預估值差,捕捉超預期或低於預期的驚喜。
- 適用場景: analyst7/analyst14/earnings估值類字段。
- 優化: 對差分再做
ts_zscore;門檻交易只在|z|>1.5時開倉。
5. 分析師期限結構模板(近遠期預估斜率)
- 表達式:
group_zscore(subtract(group_zscore(anl14_mean_eps_<p1>, industry), group_zscore(anl14_mean_eps_<p2>, industry)), industry),<p1>/<p2>為fp1/fp2/fy1/fy2等。
- 核心思想: 比較短期與長期預估的行業內斜率,捕捉預期加速或鈍化。
- 適用場景: analyst14/15 期別字段;適用成長/拐點挖掘。
- 優化: 擴展到多期間差分或
ts_delta跟蹤斜率變化;對斜率做rank或winsorize。
6. 期權Greeks淨值模板
- 表達式:
group_operator(<put_greek> - <call_greek>, <group>),Greek可選Delta/Gamma/Vega/Theta。
- 核心思想: 同組內看多vs看空的期權敏感度差,反映隱含情緒或凸性差異。
- 適用場景: Option數據集;行業或市值分組下的情緒/波動信號。
- 優化: 多Greek加權組合;對淨值再
ts_mean平滑;事件期(財報)可降權或過濾。
7. IV Skew動量擴展
- 表達式:
ts_delta(implied_volatility_call_<w>, <p>) - ts_delta(implied_volatility_put_<w>, <p>)。
- 核心思想: Call與Put隱含波動變化差捕捉情緒轉折;可做多情緒改善、做空情緒惡化。
- 優化: 加
trade_when(abs(skew)>thr)門檻;財報前後縮窗;行業中性。
8. 殘差動量精簡版
- 表達式:
res = regression_neut(returns, <common_factor_matrix>); ts_mean(res, <window>)。
- 核心思想: 先剝離市場/風格暴露,再對特異收益做動量;較原版多重回歸更輕量。
- 優化: 使用
ts_decay_linear增加近期權重;行業內group_rank提升截面穩定度。
9. 分紅/現金流組間殘差(簡版)
- 表達式:
alpha = ts_zscore(ts_backfill(<cf_or_div_field>,90)); g = group_mean(alpha, <group>, <weight_opt>); resid = alpha - g; group_zscore(resid, <group>)。
- 核心思想: 先回填平滑,再对組均值做殘差,捕捉組內相對高/低分紅或現金流質量。
- 適用場景: fnd8/fnd6/topdiv等分紅現金流字段;行業/國家分組。
- 優化: 權重可用log(cap)或vol逆;對resid再做
ts_mean平滑。
模板格式说明
每个模板使用以下占位符格式:
<ts_op/> - 时间序列操作符,如 ts_rank, ts_mean, ts_delta, ts_ir, ts_stddev, ts_zscore
<group_op/> - 分组操作符,如 group_rank, group_neutralize, group_zscore
<vec_op/> - 向量操作符,如 vec_avg, vec_sum, vec_max, vec_min, vec_stddev
<field/> - 数据字段占位符
<d/> - 时间窗口参数,常用值: {5, 22, 66, 126, 252, 504}
<group/> - 分组字段,如 industry, sector, subindustry, market
第一部分:基础结构模板 (TPL-001 ~ TPL-010)
TPL-001: 基本面时序排名
模板: <group_op/>(<ts_op/>(<field/>, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore, ts_delta, ts_ir |
时序比较操作 |
<group_op/> |
group_rank, group_zscore, group_neutralize |
截面比较操作 |
<field/> |
基本面字段: eps, sales, assets, roe, roa |
公司财务数据 |
<d/> |
66, 126, 252 |
季度/半年/年 |
<group/> |
industry, sector |
行业分组 |
示例:
group_rank(ts_rank(eps, 252), industry)
group_zscore(ts_ir(sales, 126), sector)
TPL-002: 利润/规模比率模板
模板: <ts_op/>(<profit_field/>/<size_field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore, ts_mean, ts_delta |
时序操作 |
<profit_field/> |
net_income, ebitda, operating_income, gross_profit |
利润类字段 |
<size_field/> |
assets, cap, sales, equity |
规模类字段 |
<d/> |
66, 126, 252 |
中长期窗口 |
示例:
ts_rank(net_income/assets, 252)
ts_zscore(ebitda/cap, 126)
ts_rank(operating_income/cap, 252)^2
TPL-003: 向量数据处理模板 (VECTOR字段必用)
模板: <ts_op/>(<vec_op/>(<vector_field/>), <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_mean, ts_delta, ts_ir, ts_zscore |
时序操作 |
<vec_op/> |
vec_avg, vec_sum, vec_max, vec_min, vec_stddev |
向量聚合 |
<vector_field/> |
分析师数据: anl4_*, analyst_*, oth41_* |
VECTOR类型字段 |
<d/> |
22, 66, 126 |
短中期窗口 |
示例:
ts_delta(vec_avg(anl4_eps_mean), 22)
ts_rank(vec_sum(analyst_estimate), 66)
ts_ir(vec_avg(oth41_s_west_eps_ftm_chg_3m), 126)
TPL-004: 双重中性化模板
模板:
a = <ts_op/>(<field/>, <d/>);
a1 = group_neutralize(a, bucket(rank(cap), range="<range/>"));
group_neutralize(a1, <group/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_zscore, ts_rank, ts_ir |
时序操作 |
<field/> |
任意数据字段 |
主信号 |
<d/> |
66, 126, 252 |
时间窗口 |
<range/> |
"0.1,1,0.1", "0,1,0.1" |
市值分组范围 |
<group/> |
industry, sector, subindustry |
行业分组 |
示例:
a = ts_zscore(fnd72_s_pit_or_is_q_spe_si, 252);
a1 = group_neutralize(a, bucket(rank(cap), range="0.1,1,0.1"));
group_neutralize(a1, subindustry)
TPL-005: 回归中性化模板
模板:
a = <ts_op/>(<field/>, <d/>);
a1 = group_neutralize(a, bucket(rank(cap), range="<range/>"));
a2 = group_neutralize(a1, <group/>);
b = ts_zscore(cap, <d/>);
b1 = group_neutralize(b, <group/>);
regression_neut(a2, b1)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_zscore, ts_rank |
时序操作 |
<field/> |
基本面或其他字段 |
主信号 |
<d/> |
252, 504 |
长期窗口 |
<range/> |
"0.1,1,0.1" |
市值分组 |
<group/> |
subindustry, sector |
行业分组 |
TPL-006: 基本面动量模板
模板: log(ts_mean(<field/>, <d_short/>)) - log(ts_mean(<field/>, <d_long/>))
| 占位符 |
可选值 |
说明 |
<field/> |
anl4_{data}_{stats}, 基本面字段 |
数据字段 |
<d_short/> |
20, 44 |
短期窗口 |
<d_long/> |
44, 126 |
长期窗口 |
示例:
log(ts_mean(anl4_eps_mean, 44)) - log(ts_mean(anl4_eps_mean, 20))
TPL-007: 财报事件驱动模板
模板:
event = ts_delta(<fundamental_field/>, -1);
if_else(event != 0, <alpha/>, nan)
| 占位符 |
可选值 |
说明 |
<fundamental_field/> |
assets, sales, eps |
基本面字段 |
<alpha/> |
主信号表达式 |
事件发生时的Alpha |
扩展版:
change = if_else(days_from_last_change(<field/>) == <days/>, ts_delta(close, <d/>), nan)
TPL-008: 标准化回填模板
模板: <ts_op/>(winsorize(ts_backfill(<field/>, <d_backfill/>), std=<std/>), <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_decay_linear, ts_zscore |
时序操作 |
<field/> |
低频数据字段 |
需要回填的字段 |
<d_backfill/> |
115, 120, 180 |
回填窗口 |
<std/> |
4, 3, 5 |
winsorize标准差 |
<d/> |
10, 22, 60 |
操作窗口 |
示例:
ts_decay_linear(-densify(zscore(winsorize(ts_backfill(anl4_adjusted_netincome_ft, 115), std=4))), 10)
ts_rank(winsorize(ts_backfill(<data>, 120), std=4), 60)
TPL-009: 信号质量分组模板
模板:
signal = <ts_op/>(<field/>, <d/>);
credit_quality = bucket(rank(ts_delay(signal, 1), rate=0), range="<range/>");
group_neutralize(<decay_op/>(signal, k=<k/>), credit_quality)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore |
信号计算 |
<field/> |
任意数据字段 |
主字段 |
<d/> |
60, 120 |
窗口 |
<range/> |
"0.2,1,0.2" |
分组范围 |
<decay_op/> |
ts_weighted_decay |
衰减操作 |
<k/> |
0.5, 0.3 |
衰减系数 |
TPL-010: 复合分组中性化
模板: group_neutralize(<alpha/>, densify(<group1/>)*1000 + densify(<group2/>))
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<group1/> |
subindustry, sector |
主分组 |
<group2/> |
country, exchange |
次分组 |
第二部分:量价类模板 (TPL-101 ~ TPL-120)
TPL-101: 换手率反转
模板: -<ts_op/>(volume/sharesout, <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_mean, ts_rank, ts_std_dev |
时序统计 |
<d/> |
5, 22, 66 |
短中期窗口 |
示例:
-ts_mean(volume/sharesout, 22)
-ts_std_dev(volume/sharesout, 22)
TPL-102: 量稳换手率 (STR)
模板: -ts_std_dev(volume/sharesout, <d1/>)/ts_mean(volume/sharesout, <d2/>)
| 占位符 |
可选值 |
说明 |
<d1/> |
20, 22 |
波动计算窗口 |
<d2/> |
20, 22 |
均值计算窗口 |
优化版:
模板: -group_neutralize(ts_std_dev(volume/sharesout, <d/>)/ts_mean(volume/sharesout, <d/>), bucket(rank(cap), range="0.1,1,0.1"))
TPL-103: 价格反转模板
模板: -<ts_op/>(<price_field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_delta, ts_mean, ts_rank |
时序操作 |
<price_field/> |
close, returns, close/open-1, open/ts_delay(close,1)-1 |
价格/收益字段 |
<d/> |
3, 5, 22 |
短期窗口 |
示例:
-ts_delta(close, 5) # 价格变化反转
-ts_mean(returns, 22) # 收益均值反转
-ts_mean(close/open-1, 22) # 日内收益反转
-(open/ts_delay(close,1)-1) # 隔夜收益反转
TPL-104: 价格乖离率
模板: -(close - ts_mean(close, <d/>))/ts_mean(close, <d/>)
| 占位符 |
可选值 |
说明 |
<d/> |
5, 22, 66 |
MA周期 |
TPL-105: 量价相关性
模板: -ts_corr(<price_field/>, <volume_field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<price_field/> |
close, returns, abs(returns) |
价格类 |
<volume_field/> |
volume, volume/sharesout, adv20 |
成交量类 |
<d/> |
22, 66, 126 |
相关性窗口 |
TPL-106: 跳跃因子
模板: -group_neutralize(ts_mean((close/open-1) - log(close/open), <d/>), bucket(rank(cap), range="0.1,1,0.1"))
| 占位符 |
可选值 |
说明 |
<d/> |
22, 30, 66 |
平均窗口 |
带成交量增强版:
模板: -group_neutralize(ts_mean((close/open-1) - log(close/open), <d/>) * ts_rank(volume, 5), bucket(rank(cap), range="0.1,1,0.1"))
TPL-107: 指数衰减动量
模板: -ts_decay_exp_window(<field/>, <d/>, factor=<f/>)
| 占位符 |
可选值 |
说明 |
<field/> |
returns, returns*(volume/sharesout), close/open-1 |
收益类字段 |
<d/> |
22, 66, 126 |
衰减窗口 |
<f/> |
0.04, 0.1, 0.5, 0.9 |
衰减因子,越小衰减越快 |
TPL-108: 成交量周期函数 (VOC)
模板:
m_minus = ts_mean(volume, <d_long/>) - ts_mean(volume, <d_short/>);
delta = (ts_max(m_minus, <d_short/>) - m_minus)/(ts_max(m_minus, <d_short/>) - ts_min(m_minus, <d_short/>));
<weight1/>*delta + <weight2/>*ts_delay(delta, 1)
| 占位符 |
可选值 |
说明 |
<d_long/> |
30, 66 |
长期均值窗口 |
<d_short/> |
10, 22 |
短期均值窗口 |
<weight1/> |
0.33, 0.5 |
当日权重 |
<weight2/> |
0.67, 0.5 |
前日权重 |
TPL-109: 市场相关性因子
模板:
mkt_ret = group_mean(returns, 1, market);
pt = ts_corr(returns, mkt_ret, <d/>);
rank(1/(2*(1-pt)))
| 占位符 |
可选值 |
说明 |
<d/> |
10, 22, 66 |
相关性窗口 |
TPL-110: 成交量趋势模板
模板: ts_decay_linear(volume/ts_sum(volume, <d_long/>), <d_short/>)
| 占位符 |
可选值 |
说明 |
<d_long/> |
252, 504 |
长期总量窗口 |
<d_short/> |
10, 22 |
衰减窗口 |
TPL-111: VWAP收益相关
模板:
returns > -<threshold/> ? (ts_ir(ts_corr(ts_returns(vwap, 1), ts_delay(group_neutralize(<field/>, market), <d1/>), <d2/>), <d2/>)) : -1
| 占位符 |
可选值 |
说明 |
<threshold/> |
0.1, 0.05 |
收益阈值 |
<field/> |
任意数据字段 |
信号字段 |
<d1/> |
30, 60 |
延迟窗口 |
<d2/> |
90, 120 |
相关性窗口 |
TPL-112: 动量因子创建
模板: ts_sum(winsorize(ts_backfill(<data/>, <day/>), std=4.0), <n/>*21) - ts_sum(winsorize(ts_backfill(<data/>, <day/>), std=4.0), <m/>*21)
| 占位符 |
可选值 |
说明 |
<data/> |
returns, 基本面字段 |
数据字段 |
<day/> |
120, 180 |
回填窗口 |
<n/> |
6, 12 |
长期月数 |
<m/> |
1, 0.1*n |
短期月数 |
TPL-113: 线性衰减排名
模板: -ts_rank(ts_decay_linear(<field/>, <d1/>), <d2/>)
| 占位符 |
可选值 |
说明 |
<field/> |
percent, 任意时序信号 |
输入信号 |
<d1/> |
10, 22, 150 |
衰减窗口 |
<d2/> |
50, 126 |
排名窗口 |
第三部分:情绪/新闻类模板 (TPL-201 ~ TPL-220)
TPL-201: 情绪差值模板
模板: <ts_op/>(rank(ts_backfill(<positive_sentiment/>, <d/>)) - rank(ts_backfill(<negative_sentiment/>, <d/>)), <d2/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_mean, ts_rank, ts_zscore |
时序操作 |
<positive_sentiment/> |
正面情绪字段 |
积极信号 |
<negative_sentiment/> |
负面情绪字段 |
消极信号 |
<d/> |
20, 30 |
回填窗口 |
<d2/> |
5, 22 |
比较窗口 |
TPL-202: 新闻情绪回归残差
模板:
sentiment = ts_backfill(ts_delay(<vec_op/>(<sentiment_field/>), 1), <d1/>);
vhat = ts_regression(volume, sentiment, <d2/>);
ehat = -ts_regression(returns, vhat, <d3/>);
group_rank(ehat, bucket(rank(cap), range="0,1,0.1"))
| 占位符 |
可选值 |
说明 |
<vec_op/> |
vec_avg, vec_sum |
情绪聚合方式 |
<sentiment_field/> |
scl12_sentiment, snt_buzz_ret, nws18_relevance |
情绪数据 |
<d1/> |
20, 30 |
回填窗口 |
<d2/> |
120, 250 |
成交量回归窗口 |
<d3/> |
250, 750 |
收益回归窗口 |
TPL-203: 社交媒体情绪
模板: rank(<vec_op/>(scl12_alltype_buzzvec) * <vec_op/>(scl12_sentiment))
| 占位符 |
可选值 |
说明 |
<vec_op/> |
vec_sum, vec_avg |
向量聚合 |
带条件版:
模板:
sent_vol = vec_sum(scl12_alltype_buzzvec);
trade_when(rank(sent_vol) > 0.95, -zscore(scl12_buzz)*sent_vol, -1)
TPL-204: 条件情绪过滤
模板:
group_rank(
sigmoid(if_else(ts_zscore(<sentiment_field/>, <d/>) > <threshold/>, ts_zscore(<sentiment_field/>, <d/>), 0)),
<group/>
)
| 占位符 |
可选值 |
说明 |
<sentiment_field/> |
情绪字段 |
情绪数据 |
<d/> |
22, 30, 66 |
zscore窗口 |
<threshold/> |
1, 1.5, 2 |
z-score阈值 |
<group/> |
industry, sector |
分组字段 |
TPL-205: 情绪+波动率复合
模板: log(1 + sigmoid(ts_zscore(<sentiment_field/>, <d1/>)) * sigmoid(ts_zscore(<volatility_field/>, <d2/>)))
| 占位符 |
可选值 |
说明 |
<sentiment_field/> |
情绪字段 |
情绪数据 |
<volatility_field/> |
option8_*, 波动率字段 |
波动率数据 |
<d1/> |
30, 66 |
情绪窗口 |
<d2/> |
30, 66 |
波动率窗口 |
TPL-206: 指数衰减情绪
模板: ts_decay_exp_window(vec_avg(<sentiment_field/>), <d/>, <factor/>)
| 占位符 |
可选值 |
说明 |
<sentiment_field/> |
mws85_sentiment, nws18_ber |
情绪向量字段 |
<d/> |
10, 22 |
衰减窗口 |
<factor/> |
0.9, 0.7 |
衰减因子 |
双情绪组合:
decayed_sentiment_1 = ts_decay_exp_window(vec_avg(mws85_sentiment), 10, 0.9);
decayed_sentiment_2 = ts_decay_exp_window(vec_avg(nws18_ber), 10, 0.9);
decayed_sentiment_1 + decayed_sentiment_2
TPL-207: 新闻结果排名
模板:
percent = ts_rank(vec_stddev(<news_field/>), <d1/>);
-ts_rank(ts_decay_linear(percent, <d2/>), <d1/>)
| 占位符 |
可选值 |
说明 |
<news_field/> |
nws12_prez_result2 |
新闻数据 |
<d1/> |
50, 66 |
排名窗口 |
<d2/> |
150, 252 |
衰减窗口 |
TPL-208: 分组行业提取情绪
模板: scale(group_extra(ts_sum(sigmoid(ts_backfill(<data/>, <d1/>)), <d2/>) - ts_sum(sigmoid(ts_backfill(<data/>, <d1/>)), <d2/>), 0.5, densify(industry)))
| 占位符 |
可选值 |
说明 |
<data/> |
情绪或基本面字段 |
数据字段 |
<d1/> |
180, 252 |
回填窗口 |
<d2/> |
3, 5 |
求和窗口 |
第四部分:期权类模板 (TPL-301 ~ TPL-320)
TPL-301: 期权希腊字母差值
模板: <group_op/>(<put_greek/> - <call_greek/>, <group/>)
| 占位符 |
可选值 |
说明 |
<group_op/> |
group_rank, group_neutralize, group_zscore |
分组操作 |
<put_greek/> |
put_delta, put_gamma, put_theta, put_vega |
Put希腊字母 |
<call_greek/> |
call_delta, call_gamma, call_theta, call_vega |
Call希腊字母 |
<group/> |
industry, sector |
分组字段 |
TPL-302: 期权价格信号
模板: group_rank(<ts_op/>(<vec_op/>(<option_price_field/>)/close, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_scale, ts_rank, ts_zscore |
时序操作 |
<vec_op/> |
vec_max, vec_avg |
向量操作 |
<option_price_field/> |
期权价格字段 |
期权数据 |
<d/> |
66, 120, 252 |
时间窗口 |
<group/> |
industry, sector |
分组字段 |
TPL-303: 期权波动率信号
模板: sigmoid(<ts_op/>(<opt_high/> - <opt_close/>, <d/>))
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_ir, ts_stddev, ts_zscore, ts_mean |
波动性操作 |
<opt_high/> |
期权高价字段 |
期权最高价 |
<opt_close/> |
期权收盘价字段 |
期权收盘价 |
<d/> |
120, 250, 504 |
长期窗口 |
说明: 期权波动类因子通常需要较长窗口(120-504天)来捕捉稳定信号
TPL-304: 隐含波动率比率
模板: <ts_op/>(implied_volatility_call_<tenor/>/parkinson_volatility_<tenor/>, <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore, ts_delta |
时序操作 |
<tenor/> |
120, 270 |
期权期限 |
<d/> |
66, 126, 252 |
窗口 |
TPL-305: Put-Call成交量比
模板: <ts_op/>(pcr_vol_<tenor/>, <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_delta, ts_zscore |
时序操作 |
<tenor/> |
10, 30, 60 |
期限 |
<d/> |
22, 66, 126 |
窗口 |
TPL-306: 期权盈亏平衡点
模板: group_rank(ts_zscore(<breakeven_field/>/close, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<breakeven_field/> |
call_breakeven_10, put_breakeven_10 |
盈亏平衡字段 |
<d/> |
66, 126, 252 |
窗口 |
<group/> |
sector, industry |
分组 |
第五部分:分析师类模板 (TPL-401 ~ TPL-420)
TPL-401: 分析师预期变化
模板: <vec_op/>(tail(tail(<analyst_change_field/>, lower=<low/>, upper=<high/>, newval=<low/>), lower=-<high/>, upper=-<low/>, newval=-<low/>))
| 占位符 |
可选值 |
说明 |
<vec_op/> |
vec_avg, vec_sum |
向量聚合 |
<analyst_change_field/> |
oth41_s_west_eps_ftm_chg_3m, anl4_eps_chg |
预期变化字段 |
<low/> |
0.25, 0.1 |
下截断值 |
<high/> |
1000, 100 |
上截断值 |
TPL-402: 剥离动量的分析师因子
模板:
afr = <vec_op/>(<analyst_field/>);
short_mom = ts_mean(returns - group_mean(returns, 1, market), <d_short/>);
long_mom = ts_delay(ts_mean(returns - group_mean(returns, 1, market), <d_long/>), <d_long/>);
regression_neut(regression_neut(afr, short_mom), long_mom)
| 占位符 |
可选值 |
说明 |
<vec_op/> |
vec_avg, vec_sum |
向量聚合 |
<analyst_field/> |
分析师数据字段 |
一致预期等 |
<d_short/> |
5, 10 |
短期动量窗口 |
<d_long/> |
20, 22 |
长期动量窗口 |
TPL-403: 分析师覆盖度过滤
模板:
coverage_filter = ts_sum(<vec_op/>(<analyst_field/>), <d/>) > <min_count/>;
if_else(coverage_filter, <alpha/>, nan)
| 占位符 |
可选值 |
说明 |
<vec_op/> |
vec_count |
统计分析师数量 |
<analyst_field/> |
分析师向量字段 |
分析师数据 |
<d/> |
66, 90, 126 |
统计窗口 |
<min_count/> |
2, 3, 5 |
最小覆盖数量 |
<alpha/> |
主信号表达式 |
待过滤的Alpha |
TPL-404: 老虎哥回归模板
模板: group_rank(ts_regression(ts_zscore(<field1/>, <d/>), ts_zscore(vec_sum(<field2/>), <d/>), <d/>), densify(sector))
| 占位符 |
可选值 |
说明 |
<field1/> |
任意MATRIX字段 |
Y变量 |
<field2/> |
任意VECTOR字段 |
X变量 |
<d/> |
252, 504 |
回归窗口 |
说明: 经典回归模板,适用于基本面与分析师数据组合
TPL-405: 分析师预期时序变化
模板: ts_mean(vec_avg(<analyst_field/>), <d_short/>) - ts_mean(vec_avg(<analyst_field/>), <d_long/>)
| 占位符 |
可选值 |
说明 |
<analyst_field/> |
anl4_eps_mean, anl4_revenue_mean |
分析师预测 |
<d_short/> |
22, 44 |
短期窗口 |
<d_long/> |
66, 126 |
长期窗口 |
TPL-406: 三因子组合模板
模板:
my_group = market;
rank(
group_rank(ts_decay_linear(volume/ts_sum(volume, 252), 10), my_group) *
group_rank(ts_rank(vec_avg(<fundamental/>), <d/>), my_group) *
group_rank(-ts_delta(close, 5), my_group)
)
| 占位符 |
可选值 |
说明 |
<fundamental/> |
基本面VECTOR字段 |
基本面数据 |
<d/> |
252, 504 |
排名窗口 |
TPL-407: 分析师FCF比率
模板: ts_rank(vec_avg(<fcf_field/>) / vec_avg(<profit_field/>), <d/>)
| 占位符 |
可选值 |
说明 |
<fcf_field/> |
anl4_fcf_value |
自由现金流预测 |
<profit_field/> |
anl4_netprofit_low, anl4_netprofit_mean |
利润预测 |
<d/> |
66, 126, 252 |
排名窗口 |
第六部分:中性化技术模板 (TPL-501 ~ TPL-515)
TPL-501: 市值分组中性化
模板: group_neutralize(<alpha/>, bucket(rank(cap), range="<range/>"))
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号表达式 |
待中性化的Alpha |
<range/> |
"0.1,1,0.1", "0,1,0.1" |
分组范围 |
TPL-502: 双重中性化 (行业+市值)
模板:
a1 = group_neutralize(<alpha/>, bucket(rank(cap), range="<range/>"));
group_neutralize(a1, <group/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<range/> |
"0.1,1,0.1" |
市值分组 |
<group/> |
industry, sector, subindustry |
行业分组 |
TPL-503: 回归中性化
模板: regression_neut(<alpha/>, <factor/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<factor/> |
log(cap), ts_ir(returns, 126), ts_std_dev(returns, 22) |
待剥离因子 |
多层回归中性化:
模板: regression_neut(regression_neut(<alpha/>, <factor1/>), <factor2/>)
TPL-504: 中性化顺序优化
模板:
a = ts_zscore(<field/>, <d/>);
a1 = group_neutralize(a, <group/>);
a2 = group_neutralize(a1, bucket(rank(cap), range="<range/>"))
| 占位符 |
可选值 |
说明 |
<field/> |
任意数据字段 |
主信号 |
<d/> |
252 |
zscore窗口 |
<group/> |
industry, subindustry |
行业分组 |
<range/> |
"0.1,1,0.1" |
市值分组 |
说明: 先行业中性化再市值中性化,与反向顺序效果可能不同
TPL-505: sta1分组中性化
模板: group_neutralize(<alpha/>, sta1_top3000c20)
说明: 使用预定义的sta1分组进行中性化
第七部分:条件交易模板 (TPL-601 ~ TPL-620)
TPL-601: 流动性过滤
模板: trade_when(volume > adv20 * <threshold/>, <alpha/>, -1)
| 占位符 |
可选值 |
说明 |
<threshold/> |
0.618, 0.5, 1 |
流动性阈值 |
<alpha/> |
主信号 |
原始Alpha |
反向流动性:
trade_when(volume < adv20, <alpha/>, -1)
TPL-602: 波动率过滤
模板: trade_when(ts_rank(ts_std_dev(returns, <d1/>), <d2/>) < <threshold/>, <alpha/>, -1)
| 占位符 |
可选值 |
说明 |
<d1/> |
5, 10, 22 |
波动计算窗口 |
<d2/> |
126, 180, 252 |
排名窗口 |
<threshold/> |
0.8, 0.9 |
波动率阈值 |
<alpha/> |
主信号 |
原始Alpha |
TPL-603: 极端收益过滤
模板: trade_when(abs(returns) < <entry/>, <alpha/>, abs(returns) > <exit/>)
| 占位符 |
可选值 |
说明 |
<entry/> |
0.075, 0.05 |
入场阈值 |
<exit/> |
0.1, 0.095 |
出场阈值 |
<alpha/> |
主信号 |
原始Alpha |
TPL-604: 市值过滤
模板: trade_when(rank(cap) > <threshold/>, <alpha/>, -1)
| 占位符 |
可选值 |
说明 |
<threshold/> |
0.3, 0.5 |
市值排名阈值 |
<alpha/> |
主信号 |
原始Alpha |
TPL-605: 触发条件交易
模板:
triggerTradeexp = (ts_arg_max(volume, <d/>) < 1) && (volume > ts_sum(volume, <d/>)/<d/>);
triggerExitexp = -1;
trade_when(triggerTradeexp, <alpha/>, triggerExitexp)
| 占位符 |
可选值 |
说明 |
<d/> |
5, 10 |
判断窗口 |
<alpha/> |
-rank(ts_delta(close, 2)) |
主信号 |
TPL-606: 组合条件交易
模板:
my_group2 = bucket(rank(cap), range="0,1,0.1");
trade_when(volume > adv20, group_neutralize(<alpha/>, my_group2), -1)
| 占位符 |
可选值 |
说明 |
<alpha/> |
复合信号 |
主信号 |
TPL-607: 条件排名交易
模板:
a = <ts_op/>(<field/>, <d/>);
trade_when(rank(a) > <threshold_low/>, -zscore(<field2/>)*a, <threshold_high/>-rank(a))
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore |
时序操作 |
<field/> |
任意字段 |
条件字段 |
<field2/> |
任意字段 |
信号字段 |
<d/> |
25, 66 |
窗口 |
<threshold_low/> |
0.03, 0.1 |
下阈值 |
<threshold_high/> |
0.25, 0.5 |
上阈值 |
第八部分:复合多因子模板 (TPL-701 ~ TPL-720)
TPL-701: 三因子乘积
模板:
my_group = market;
rank(
group_rank(<ts_op1/>(<field1/>, <d1/>), my_group) *
group_rank(<ts_op2/>(<field2/>, <d2/>), my_group) *
group_rank(<ts_op3/>(<field3/>, <d3/>), my_group)
)
| 占位符 |
可选值 |
说明 |
<ts_op1/> |
ts_decay_linear, ts_rank |
第一因子操作 |
<ts_op2/> |
ts_rank, ts_zscore |
第二因子操作 |
<ts_op3/> |
-ts_delta |
第三因子操作(反转) |
<field1/> |
volume/ts_sum(volume, 252) |
成交量趋势 |
<field2/> |
vec_avg({Fundamental}) |
基本面信号 |
<field3/> |
close |
价格信号 |
<d1/>, <d2/>, <d3/> |
各因子窗口 |
时间参数 |
TPL-702: 波动率条件反转
模板:
vol = ts_std_dev(<ret_field/>, <d/>);
vol_mean = group_mean(vol, 1, market);
flip_ret = if_else(vol < vol_mean, -<ret_field/>, <ret_field/>);
-ts_mean(flip_ret, <d/>)
| 占位符 |
可选值 |
说明 |
<ret_field/> |
returns, close/open-1 |
收益字段 |
<d/> |
20, 22 |
窗口参数 |
说明: 低波动环境做反转,高波动环境做动量
TPL-703: 恐惧指标组合
模板:
fear = ts_mean(
abs(returns - group_mean(returns, 1, market)) /
(abs(returns) + abs(group_mean(returns, 1, market)) + 0.1),
<d/>
);
-group_neutralize(fear * <signal/>, bucket(rank(cap), range="0.1,1,0.1"))
| 占位符 |
可选值 |
说明 |
<d/> |
20, 22 |
恐惧指标窗口 |
<signal/> |
主信号表达式 |
待组合信号 |
TPL-704: 债务杠杆相关性
模板: group_neutralize(ts_zscore(<leverage_field/>, <d1/>) * ts_corr(<leverage_field/>, returns, <d2/>), sector)
| 占位符 |
可选值 |
说明 |
<leverage_field/> |
debt_to_equity, debt/assets |
杠杆字段 |
<d1/> |
60, 126 |
zscore窗口 |
<d2/> |
20, 66 |
相关性窗口 |
TPL-705: 模型数据信号
模板: -<model_field/>
| 占位符 |
可选值 |
说明 |
<model_field/> |
mdl175_01dtsv, mdl175_01icc |
模型字段 |
带排名版:
rank(group_rank(ts_rank(ts_backfill(<model_field/>, 5), 5), sta1_top3000c20))
TPL-706: 回归zscore模板
模板: ts_regression(ts_zscore(<field1/>, <d/>), ts_zscore(<field2/>, <d/>), <d/>)
| 占位符 |
可选值 |
说明 |
<field1/> |
MATRIX字段 |
Y变量 |
<field2/> |
MATRIX字段或vec_sum(VECTOR) |
X变量 |
<d/> |
252, 500, 504 |
回归窗口 |
TPL-707: 分组Delta模板
模板: group_neutralize(ts_delta(<field/>, <d/>), sector)
| 占位符 |
可选值 |
说明 |
<field/> |
任意数据字段 |
主字段 |
<d/> |
22, 66, 126 |
差分窗口 |
第九部分:数据预处理模板 (TPL-801 ~ TPL-815)
TPL-801: Winsorize截断
模板: winsorize(<field/>, std=<std/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
原始数据 |
<std/> |
3, 4, 5 |
截断标准差 |
TPL-802: Sigmoid归一化
模板: sigmoid(<ts_op/>(<field/>, <d/>))
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_zscore, ts_ir, ts_rank |
时序操作 |
<field/> |
任意字段 |
原始数据 |
<d/> |
22, 66, 252 |
窗口 |
TPL-803: 数据回填
模板: ts_backfill(<field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<field/> |
低频数据字段 |
需要回填的字段 |
<d/> |
115, 120, 180, 252 |
回填窗口 |
TPL-804: 条件替换
模板: if_else(is_not_nan(<field/>), <field/>, <alternative/>)
| 占位符 |
可选值 |
说明 |
<field/> |
主字段 |
可能有NaN的字段 |
<alternative/> |
替代字段或值 |
NaN时的替代 |
TPL-805: 极端值替换
模板: tail(tail(<field/>, lower=<low/>, upper=<high/>, newval=<low/>), lower=-<high/>, upper=-<low/>, newval=-<low/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
原始数据 |
<low/> |
0.25, 0.1 |
下界 |
<high/> |
100, 1000 |
上界 |
TPL-806: 组合预处理
模板: <ts_op/>(winsorize(ts_backfill(<field/>, <d_backfill/>), std=<std/>), <d/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore, ts_mean |
时序操作 |
<field/> |
低频字段 |
需要处理的字段 |
<d_backfill/> |
120, 180 |
回填窗口 |
<std/> |
4 |
winsorize参数 |
<d/> |
22, 66 |
操作窗口 |
TPL-807: ts_min/ts_max替代
模板: ts_backfill(if_else(ts_arg_min(<field/>, <d/>) == 0, <field/>, nan), 120)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
原始数据 |
<d/> |
22, 66, 126 |
窗口 |
说明: 当ts_min/ts_max不可用时的替代方案
第十部分:高级统计模板 (TPL-901 ~ TPL-920)
TPL-901: 高阶矩模板 (ts_moment)
模板: <ts_op/>(<group_op/>(ts_moment(<field/>, <d/>, k=<k/>), <group/>))
| 占位符 |
可选值 |
说明 |
<ts_op/> |
rank, zscore, sigmoid |
标准化操作 |
<group_op/> |
group_rank, group_zscore |
分组操作 |
<field/> |
任意MATRIX字段 |
数据字段 |
<d/> |
22, 66, 126 |
窗口 |
<k/> |
2, 3, 4 |
k=2方差, k=3偏度, k=4峰度 |
说明: ts_moment(x, d, k)计算k阶中心矩
TPL-902: 协偏度/协峰度模板
模板: <group_op/>(ts_co_skewness(<field1/>, <field2/>, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<group_op/> |
group_rank, group_zscore |
分组操作 |
<field1/> |
returns, close |
第一变量 |
<field2/> |
volume, vwap |
第二变量 |
<d/> |
66, 126, 252 |
窗口 |
协峰度版:
模板: <group_op/>(ts_co_kurtosis(<field1/>, <field2/>, <d/>), <group/>)
TPL-903: 偏相关模板 (ts_partial_corr)
模板: group_rank(ts_partial_corr(<field1/>, <field2/>, <control/>, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<field1/> |
returns, 收益相关 |
Y变量 |
<field2/> |
任意字段 |
X变量 |
<control/> |
group_mean(returns, 1, market) |
控制变量(市场收益) |
<d/> |
60, 126, 252 |
窗口 |
<group/> |
sector, industry |
分组 |
说明: 计算两变量偏相关,控制第三变量影响
TPL-904: 三元相关模板 (ts_triple_corr)
模板: group_rank(ts_triple_corr(<field1/>, <field2/>, <field3/>, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<field1/> |
returns |
第一变量 |
<field2/> |
volume |
第二变量 |
<field3/> |
基本面字段 |
第三变量 |
<d/> |
60, 126 |
窗口 |
<group/> |
sector, industry |
分组 |
TPL-905: Theil-Sen回归模板
模板: group_rank(ts_theilsen(<field1/>, <field2/>, <d/>), <group/>)
| 占位符 |
可选值 |
说明 |
<field1/> |
任意MATRIX字段 |
Y变量 |
<field2/> |
任意MATRIX字段或ts_step(1) |
X变量 |
<d/> |
126, 252, 500 |
窗口 |
<group/> |
sector, industry |
分组 |
说明: Theil-Sen回归比普通回归更鲁棒
TPL-906: 多项式回归残差
模板: ts_poly_regression(<field1/>, <field2/>, <d/>, k=<k/>)
| 占位符 |
可选值 |
说明 |
<field1/> |
Y变量 |
被解释变量 |
<field2/> |
X变量 |
解释变量 |
<d/> |
126, 252 |
窗口 |
<k/> |
1, 2, 3 |
多项式阶数, k=2为二次回归 |
说明: 返回 y - Ey (残差)
TPL-907: 向量中性化模板
模板: ts_vector_neut(<alpha/>, <risk_factor/>, <d/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
待中性化Alpha |
<risk_factor/> |
returns, cap |
风险因子 |
<d/> |
22, 66, 126 |
窗口(不宜过长,计算慢) |
分组向量中性化:
模板: group_vector_neut(<alpha/>, <risk_factor/>, <group/>)
TPL-908: 加权衰减模板
模板: group_neutralize(ts_weighted_decay(<alpha/>, k=<k/>), <group/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
待衰减Alpha |
<k/> |
0.3, 0.5, 0.7 |
衰减系数 |
<group/> |
bucket(rank(cap), range="0.1,1,0.1") |
分组 |
TPL-909: 回归斜率模板
模板: ts_regression(ts_zscore(<field/>, <d/>), ts_step(1), <d/>, rettype=2)
| 占位符 |
可选值 |
说明 |
<field/> |
任意MATRIX字段 |
数据字段 |
<d/> |
252, 500 |
窗口 |
说明: rettype=2返回斜率,用于检测趋势
TPL-910: 最小最大压缩模板
模板: ts_min_max_cps(<field/>, <d/>, f=<f/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<d/> |
22, 66, 126 |
窗口 |
<f/> |
2, 0.5 |
压缩因子 |
等价公式: x - f * (ts_min(x, d) + ts_max(x, d))
第十一部分:事件驱动模板 (TPL-1001 ~ TPL-1020)
TPL-1001: 数据变化天数模板
模板: if_else(days_from_last_change(<field/>) == <days/>, <alpha/>, nan)
| 占位符 |
可选值 |
说明 |
<field/> |
基本面字段 |
监测变化的字段 |
<days/> |
1, 2, 5 |
距离变化的天数 |
<alpha/> |
ts_delta(close, 5), 主信号 |
事件触发时的Alpha |
动态衰减版:
模板: <alpha/> / (1 + days_from_last_change(<field/>))
TPL-1002: 最近差值模板
模板: <ts_op/>(last_diff_value(<field/>, <d/>), <d2/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore |
时序操作 |
<field/> |
任意字段 |
数据字段 |
<d/> |
60, 90, 120 |
回溯窗口 |
<d2/> |
22, 66 |
操作窗口 |
说明: 返回过去d天内最近一次不同于当前值的历史值
TPL-1003: 缺失值计数模板
模板: -ts_count_nans(ts_backfill(<field/>, <d1/>), <d2/>)
| 占位符 |
可选值 |
说明 |
<field/> |
分析师数据等 |
可能有缺失的字段 |
<d1/> |
5, 10 |
回填窗口 |
<d2/> |
20, 30 |
计数窗口 |
应用: 分析师覆盖度信号,缺失越少覆盖越好
TPL-1004: 位置最大/最小模板
模板: if_else(ts_arg_max(<field/>, <d/>) == <position/>, <alpha/>, nan)
| 占位符 |
可选值 |
说明 |
<field/> |
volume, 任意字段 |
监测字段 |
<d/> |
5, 10 |
窗口 |
<position/> |
0, 1 |
0表示今天是最大值 |
<alpha/> |
主信号 |
条件满足时的Alpha |
组合条件:
模板: (ts_arg_max(<field1/>, <d/>) == ts_arg_max(<field2/>, <d/>)) * (<alpha1/> + <alpha2/>)
TPL-1005: 财报发布事件模板
模板:
event_signal = if_else(ts_delta(<fundamental_field/>, 1) != 0, <alpha/>, nan);
ts_decay_linear(event_signal, <decay_d/>)
| 占位符 |
可选值 |
说明 |
<fundamental_field/> |
assets, sales, eps |
基本面字段 |
<alpha/> |
ts_delta(close, 5), 主信号 |
事件Alpha |
<decay_d/> |
10, 22 |
衰减窗口 |
TPL-1006: 动态Decay事件驱动
模板:
decay_weight = 1 / (1 + days_from_last_change(<event_field/>));
<alpha/> * decay_weight
| 占位符 |
可选值 |
说明 |
<event_field/> |
任意字段 |
事件触发字段 |
<alpha/> |
主信号 |
原始Alpha |
TPL-1007: 盈利公告模板
模板:
surprise = <actual_field/> - <estimate_field/>;
if_else(days_from_last_change(<actual_field/>) < <window/>, surprise, nan)
| 占位符 |
可选值 |
说明 |
<actual_field/> |
eps |
实际值 |
<estimate_field/> |
vec_avg(anl4_eps_mean) |
预测值 |
<window/> |
5, 10 |
事件有效窗口 |
第十二部分:信号处理模板 (TPL-1101 ~ TPL-1120)
TPL-1101: 黄金比例幂变换
模板: signed_power(<alpha/>, 0.618)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号表达式 |
原始Alpha |
其他幂次:
signed_power(<alpha/>, 0.5) # 平方根
signed_power(<alpha/>, 2) # 平方增强
TPL-1102: 尾部截断模板
模板: right_tail(<alpha/>, minimum=<min/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<min/> |
0, 0.1 |
最小阈值 |
左尾版:
模板: left_tail(<alpha/>, maximum=<max/>)
TPL-1103: Clamp边界限制
模板: clamp(<alpha/>, lower=<low/>, upper=<high/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<low/> |
-1, -0.5 |
下界 |
<high/> |
1, 0.5 |
上界 |
TPL-1104: 分数映射模板
模板: fraction(<alpha/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
说明: 将连续变量映射到分布内的相对位置
TPL-1105: NaN外推模板
模板: nan_out(<field/>, lower=<low/>, upper=<high/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<low/> |
-3, -5 |
下界 |
<high/> |
3, 5 |
上界 |
说明: 将超出范围的值替换为NaN
TPL-1106: Purify数据清洗
模板: purify(<field/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
需要清洗的数据 |
说明: 自动化数据清洗,减少噪声和异常值
TPL-1107: 条件保留模板
模板: keep(<field/>, <condition/>, period=<d/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<condition/> |
<field/> > 0 |
保留条件 |
<d/> |
3, 5, 10 |
滚动窗口 |
示例:
keep(returns, returns > 0, period=3) # 只保留正收益
TPL-1108: 缩放降维模板
模板: -scale_down(<ts_op/>(<field/>, <d1/>), constant=<c/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_mean, ts_rank |
时序操作 |
<field/> |
returns, 任意字段 |
数据字段 |
<d1/> |
2, 5 |
窗口 |
<c/> |
0.1, 0.05 |
缩放常数 |
TPL-1109: Truncate截断模板
模板: truncate(<alpha/>, maxPercent=<percent/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<percent/> |
0.01, 0.05 |
截断百分比 |
TPL-1110: 组合Normalize模板
模板: group_normalize(<alpha/>, <group/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<group/> |
sector, industry |
分组 |
等价公式: alpha / group_sum(abs(alpha), group)
第十三部分:Turnover控制模板 (TPL-1201 ~ TPL-1215)
TPL-1201: 目标换手率Hump
模板: ts_target_tvr_hump(<alpha/>, lambda_min=0, lambda_max=1, target_tvr=<target/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<target/> |
0.1, 0.15, 0.2 |
目标换手率 |
TPL-1202: Delta限制换手率
模板: ts_target_tvr_delta_limit(<alpha/>, <factor/>, lambda_min=0, lambda_max=1, target_tvr=<target/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<factor/> |
辅助因子 |
限制因子 |
<target/> |
0.1, 0.15 |
目标换手率 |
TPL-1203: Hump衰减组合
模板: hump_decay(<alpha/>, hump=<h/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<h/> |
0.001, 0.01 |
Hump参数 |
嵌套版:
hump(hump_decay(<alpha/>, hump=0.001))
TPL-1204: 平均+Hump模板
模板: -ts_mean(ts_target_tvr_hump(group_rank(<field/>, country), lambda_min=0, lambda_max=1, target_tvr=<target/>), <d/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<target/> |
0.1 |
目标换手率 |
<d/> |
5, 10 |
平均窗口 |
TPL-1205: 简单Hump模板
模板: hump(<alpha/>, hump=<h/>)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<h/> |
0.01, 0.001, 0.0001 |
Hump参数 |
示例:
hump(-ts_delta(close, 5), hump=0.01)
第十四部分:回填与覆盖模板 (TPL-1301 ~ TPL-1315)
TPL-1301: 分组回填模板
模板: group_backfill(<field/>, <group/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
需要回填的字段 |
<group/> |
sector, industry, market |
分组字段 |
说明: 使用组内最近值填充NaN
TPL-1302: 嵌套回填排名
模板: rank(group_backfill(<field/>, <group/>))
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<group/> |
sector, industry |
分组 |
TPL-1303: 覆盖度过滤
模板: group_count(is_nan(<field/>), market) > <threshold/> ? <alpha/> : nan
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
检测字段 |
<threshold/> |
40, 50 |
最小覆盖数 |
<alpha/> |
主信号 |
原始Alpha |
TPL-1304: NaN替换模板
模板: if_else(is_not_nan(<field/>), <field/>, <default/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<default/> |
0, 0.5, nan |
默认值 |
TPL-1305: 综合数据清洗
模板: <ts_op/>(winsorize(group_backfill(ts_backfill(<field/>, <d1/>), <group/>), std=<std/>), <d2/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
ts_rank, ts_zscore |
时序操作 |
<field/> |
低频字段 |
数据字段 |
<d1/> |
120, 180 |
时序回填窗口 |
<group/> |
sector, industry |
分组回填 |
<std/> |
4 |
winsorize参数 |
<d2/> |
66, 126 |
操作窗口 |
第十五部分:组合提取模板 (TPL-1401 ~ TPL-1415)
模板: group_extra(<field/>, <weight/>, <group/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<weight/> |
0.5, 1 |
权重 |
<group/> |
densify(industry), sector |
分组 |
说明: 用组均值填补缺失值
TPL-1402: 组合提取sigmoid
模板: scale(group_extra(ts_sum(sigmoid(ts_backfill(<field/>, <d1/>)), <d2/>) - ts_sum(sigmoid(ts_backfill(<field/>, <d1/>)), <d2/>), 0.5, densify(industry)))
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<d1/> |
180 |
回填窗口 |
<d2/> |
3 |
求和窗口 |
TPL-1403: PnL反馈模板
模板: if_else(inst_pnl(<alpha/>) > <threshold/>, <alpha/>, nan)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
<threshold/> |
0, -0.05 |
PnL阈值 |
说明: 基于单标的PnL进行条件交易
TPL-1404: 流动性加权模板
模板: <alpha/> * log(volume)
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
说明: 将仓位偏向高流动性股票
TPL-1405: 市值回归中性化
模板: regression_neut(<alpha/>, log(cap))
| 占位符 |
可选值 |
说明 |
<alpha/> |
主信号 |
原始Alpha |
说明: 剥离市值因子影响
第十六部分:百分位与分位数模板 (TPL-1501 ~ TPL-1510)
TPL-1501: 时序百分位模板
模板: ts_percentage(<field/>, <d/>, percentage=<p/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<d/> |
22, 66, 126 |
窗口 |
<p/> |
0.5, 0.25, 0.75 |
百分位 |
TPL-1502: 分位数模板
模板: <ts_op/>(ts_quantile(<field/>, <d/>, <q/>), <d2/>)
| 占位符 |
可选值 |
说明 |
<ts_op/> |
rank, zscore |
标准化 |
<field/> |
任意字段 |
数据字段 |
<d/> |
66, 126 |
窗口 |
<q/> |
0.25, 0.5, 0.75 |
分位数 |
<d2/> |
22 |
操作窗口 |
TPL-1503: Max-Min比率模板
模板: ts_max_diff(<field/>, <d/>) / ts_av_diff(<field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<d/> |
22, 66 |
窗口 |
TPL-1504: 中位数模板
模板: <field/> - ts_median(<field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<field/> |
任意字段 |
数据字段 |
<d/> |
22, 66, 252 |
窗口 |
TPL-1505: 累积乘积模板
模板: ts_product(1 + <ret_field/>, <d/>)
| 占位符 |
可选值 |
说明 |
<ret_field/> |
returns, 收益率字段 |
收益字段 |
<d/> |
5, 22, 66 |
窗口 |
说明: 计算累积收益
第十七部分:实战表达式模板 (TPL-1601 ~ TPL-1700)
说明: 以下模板从社区高票帖子中提取,为实际验证过的表达式格式。
TPL-1601: ts_max/ts_min替代公式
模板: {data} - ts_max_diff({data}, {d}) # 等效于 ts_max
模板: (({data} - ts_max_diff({data}, {d})) * ts_scale({data}, {d}) - {data}) / (ts_scale({data}, {d}) - 1) # 等效于 ts_min
| 占位符 |
可选值 |
说明 |
{data} |
任意MATRIX字段 |
数据字段 |
{d} |
22, 66, 126 |
窗口 |
应用: 当平台不支持ts_max/ts_min时的替代方案
TPL-1602: 线性衰减权重公式
模板: weight = {d} + ts_step(0); ts_sum({data} * weight, {d}) / ts_sum(weight, {d}) # 等效于 ts_decay_linear
| 占位符 |
可选值 |
说明 |
{data} |
任意字段 |
数据字段 |
{d} |
10, 22, 66 |
衰减窗口 |
TPL-1603: 组归一化公式
模板: {data} / group_sum(abs({data}), {group}) # 等效于 group_normalize
| 占位符 |
可选值 |
说明 |
{data} |
任意字段 |
数据字段 |
{group} |
industry, sector |
分组字段 |
TPL-1604: IR+峰度组合模板
模板:
rank_data = rank({field});
ts_ir(rank_data, {d}) + ts_kurtosis(rank_data, {d})
| 占位符 |
可选值 |
说明 |
{field} |
volume, returns, 任意字段 |
数据字段 |
{d} |
22, 66 |
窗口 |
说明: IR和峰度组合捕捉信号强度和分布特征
TPL-1605: VWAP相关性信号
模板: returns > -{threshold} ? (ts_ir(ts_corr(ts_returns(vwap, 1), ts_delay(group_neutralize({field}, market), {d1}), {d2}), {d2})) : -1
| 占位符 |
可选值 |
说明 |
{field} |
任意数据字段 |
信号字段 |
{threshold} |
0.1, 0.05 |
收益过滤阈值 |
{d1} |
30, 60 |
延迟窗口 |
{d2} |
90, 120 |
相关性窗口 |
TPL-1606: 球队硬币因子 (ballteam_coin)
模板:
# 基础版
rank(ballteam_coin)
# 市值中性化版
group_neutralize(rank(ballteam_coin), bucket(rank(assets), range='0.1,1,0.1'))
说明: 经典球队vs硬币因子,用于捕捉收益持续性
TPL-1607: 偏度因子模板
模板: -group_rank(ts_skewness(returns, {d}), {group})
| 占位符 |
可选值 |
说明 |
{d} |
22, 66, 126 |
偏度计算窗口 |
{group} |
sector, industry |
分组 |
说明: 负偏度股票往往表现更好
TPL-1608: 熵信号模板
模板: ts_zscore({field}, {d1}) * ts_entropy({field}, {d2})
| 占位符 |
可选值 |
说明 |
{field} |
returns, 任意字段 |
信号字段 |
{d1} |
14, 22 |
zscore窗口 |
{d2} |
14, 22 |
熵窗口 |
说明: 结合标准化和不确定性度量
TPL-1609: 分析师动量短长差模板
模板: log(ts_mean(anl4_{data}_{stats}, {d_short})) - log(ts_mean(anl4_{data}_{stats}, {d_long}))
| 占位符 |
可选值 |
说明 |
{data} |
eps, revenue, netprofit |
分析师预测类型 |
{stats} |
mean, low, high |
统计量类型 |
{d_short} |
20, 44 |
短期窗口 |
{d_long} |
44, 126 |
长期窗口 |
TPL-1610: 目标换手率分组排名
模板: -ts_mean(ts_target_tvr_hump(group_rank({field}, country), lambda_min=0, lambda_max=1, target_tvr={target}), {d})
| 占位符 |
可选值 |
说明 |
{field} |
任意字段 |
数据字段 |
{target} |
0.1, 0.15 |
目标换手率 |
{d} |
5, 10 |
平均窗口 |
TPL-1611: 最大差/均值差比率
模板: ts_max_diff({field}, {d}) / ts_av_diff({field}, {d})
| 占位符 |
可选值 |
说明 |
{field} |
任意字段 |
数据字段 |
{d} |
22, 66 |
窗口 |
说明: 捕捉极端值相对于平均变化的幅度
TPL-1612: 模型数据三层嵌套
模板:
a = rank(group_rank(ts_rank(ts_backfill({model_field}, 5), 5), sta1_top3000c20));
trade_when(rank(a) > 0.03, -zscore(ts_zscore({model_field}, 25)) * a, 0.25 - rank(a))
| 占位符 |
可选值 |
说明 |
{model_field} |
mdl175_01icc, mdl175_01dtsv |
模型字段 |
TPL-1613: 量价触发条件交易
模板:
triggerTradeexp = (ts_arg_max(volume, {d}) < 1) && (volume > ts_sum(volume, {d}) / {d});
triggerExitexp = -1;
alphaexp = -rank(ts_delta(close, 2));
trade_when(triggerTradeexp, alphaexp, triggerExitexp)
说明: 今日成交量为近期最大且高于均值时交易
TPL-1614: 情绪成交量交易
模板:
sent_vol = vec_sum(scl12_alltype_buzzvec);
trade_when(rank(sent_vol) > 0.95, -zscore(scl12_buzz) * sent_vol, -1)
说明: 高情绪量时反向交易情绪
TPL-1615: 双层中性化模板
模板:
a = ts_zscore({field}, 252);
a1 = group_neutralize(a, industry);
a2 = group_neutralize(a1, bucket(rank(cap), range='0.1,1,0.1'))
| 占位符 |
可选值 |
说明 |
{field} |
任意字段 |
数据字段 |
说明: 先行业后市值的双重中性化
TPL-1616: 相关性计算公式
模板:
a = {field1};
b = {field2};
p = {d};
c = ts_mean(ts_av_diff(a, p) * ts_av_diff(b, p), p);
c / ts_std_dev(a, p) / ts_std_dev(b, p) # 近似 ts_corr
| 占位符 |
可选值 |
说明 |
{field1} |
close, returns |
第一字段 |
{field2} |
volume, open |
第二字段 |
{d} |
5, 22 |
窗口 |
TPL-1617: 回归中性化双因子
模板:
afr = vec_avg({analyst_field});
short_mom = ts_mean(returns - group_mean(returns, 1, market), {d_short});
long_mom = ts_delay(ts_mean(returns - group_mean(returns, 1, market), {d_long}), {d_long});
regression_neut(regression_neut(afr, short_mom), long_mom)
| 占位符 |
可选值 |
说明 |
{analyst_field} |
分析师VECTOR字段 |
分析师数据 |
{d_short} |
5, 10 |
短期动量窗口 |
{d_long} |
20, 22 |
长期动量窗口 |
说明: 剥离短期和长期动量后的分析师因子
TPL-1618: 回归斜率趋势检测
模板: ts_regression(ts_zscore({field}, {d}), ts_step(1), {d}, rettype=2)
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
252, 500 |
窗口 |
说明: rettype=2返回回归斜率,检测长期趋势
TPL-1619: 三因子乘积组合
模板:
my_group = market;
rank(
group_rank(ts_decay_linear(volume / ts_sum(volume, 252), 10), my_group) *
group_rank(ts_rank(vec_avg({fundamental}), {d}), my_group) *
group_rank(-ts_delta(close, 5), my_group)
)
| 占位符 |
可选值 |
说明 |
{fundamental} |
基本面VECTOR字段 |
基本面数据 |
{d} |
252, 504 |
排名窗口 |
说明: 成交量趋势 × 基本面排名 × 价格反转
TPL-1620: 波动率条件反转
模板:
vol = ts_std_dev(returns, {d});
vol_mean = group_mean(vol, 1, market);
flip_ret = if_else(vol < vol_mean, -returns, returns);
-ts_mean(flip_ret, {d})
说明: 低波动做反转,高波动做动量
TPL-1621: 恐惧指标复合
模板:
fear = ts_mean(
abs(returns - group_mean(returns, 1, market)) /
(abs(returns) + abs(group_mean(returns, 1, market)) + 0.1),
{d}
);
-group_neutralize(fear * {signal}, bucket(rank(cap), range='0.1,1,0.1'))
| 占位符 |
可选值 |
说明 |
{d} |
20, 22 |
窗口 |
{signal} |
主信号 |
待组合信号 |
TPL-1622: 财务质量单因子
模板: group_neutralize(rank({fundamental_field}), bucket(rank(cap), range='0,1,0.1'))
| 占位符 |
可选值 |
说明 |
{fundamental_field} |
roe, roa, net_income/assets |
财务质量指标 |
TPL-1623: 老虎哥回归模板
模板: group_rank(ts_regression(ts_zscore({field1}, {d}), ts_zscore(vec_sum({field2}), {d}), {d}), densify(sector))
| 占位符 |
可选值 |
说明 |
{field1} |
任意MATRIX字段 |
Y变量 |
{field2} |
任意VECTOR字段 |
X变量 |
{d} |
252, 504 |
回归窗口 |
TPL-1624: 综合数据清洗模板
模板: ts_decay_linear(-densify(zscore(winsorize(ts_backfill({field}, 115), std=4))), 10)
| 占位符 |
可选值 |
说明 |
{field} |
低频字段如 anl4_adjusted_netincome_ft |
需要处理的字段 |
TPL-1625: 延迟最大值位置模板
模板: ts_max({field}, {d}) = ts_delay({field}, ts_arg_max({field}, {d})) # 等效公式
| 占位符 |
可选值 |
说明 |
{field} |
任意字段 |
数据字段 |
{d} |
22, 66 |
窗口 |
TPL-1626: 数据探索通用模板
模板: zscore(ts_delta(rank(ts_zscore({field}, {d1})), {d2}))
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
待探索数据字段 |
{d1} |
60, 126, 252 |
zscore窗口 |
{d2} |
5, 10, 22 |
delta窗口 |
说明: 顾问推荐的新数据探索模板,可替换op和时间参数
TPL-1627: 自定义衰减权重模板
模板:
weight = {d} + ts_step(0); # 线性递增权重
ts_sum({data} * weight, {d}) / ts_sum(weight, {d}) # 加权平均
# 替代版 (ts_step递减)
ts_sum({alpha} * ts_step(1), {d}) / ts_sum(ts_step(1), {d})
| 占位符 |
可选值 |
说明 |
{data} |
任意字段 |
数据字段 |
{alpha} |
主信号 |
原始Alpha |
{d} |
10, 22, 66 |
衰减窗口 |
说明: 当没有ts_decay_linear权限时的替代方案
TPL-1628: log_diff相对增长模板
模板: group_rank(log_diff({field}), {group})
| 占位符 |
可选值 |
说明 |
{field} |
财务指标如 sales, eps, assets |
数据字段 |
{group} |
sector, industry |
分组 |
说明: 检测相对增长率,对乘性变化更敏感
TPL-1629: ts_product累积收益模板
模板: group_rank(ts_product(1 + {ret_field}, {d}), {group})
| 占位符 |
可选值 |
说明 |
{ret_field} |
returns, 收益率字段 |
收益字段 |
{d} |
22, 66, 126 |
窗口 |
{group} |
sector, industry |
分组 |
说明: 计算累积收益排名
TPL-1630: ts_percentage阈值模板
模板:
high_threshold = ts_percentage({field}, {d}, percentage=0.5);
low_threshold = ts_percentage({field}, {d}, percentage=0.5);
{signal}
| 占位符 |
可选值 |
说明 |
{field} |
close, 价格字段 |
阈值计算字段 |
{d} |
22, 66 |
窗口 |
{signal} |
主信号 |
条件信号 |
说明: 用于震荡带突破策略的阈值构建
TPL-1631: 动量反转切换模板
模板:
mom = ts_sum(returns, {d_long}) - ts_sum(returns, {d_short});
reversal = -ts_delta(close, {d_short});
if_else(ts_rank(ts_std_dev(returns, {d_short}), {d_long}) > 0.5, mom, reversal)
| 占位符 |
可选值 |
说明 |
{d_short} |
5, 10 |
短期窗口 |
{d_long} |
22, 66 |
长期窗口 |
说明: 高波动环境用动量,低波动环境用反转
TPL-1632: 市场收益率近似模板 (CHN)
模板:
value = rank(cap) > 0.9 ? cap : 0;
market_return = group_sum(returns * value, country) / group_sum(value, country);
market_return
说明: 用市值加权近似沪深300指数收益率,设置neutralization=NONE, decay=0
TPL-1633: Beta回归中性化模板
模板:
market_return = group_mean(returns, 1, market);
ts_regression({field}, market_return, {d}) # 返回残差(Y - E[Y])
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
待中性化字段 |
{d} |
126, 252 |
回归窗口 |
说明: 使用一元线性回归剥离市场因子
TPL-1634: ts_moment高阶矩k值模板
模板: ts_moment({field}, {d}, k={k})
k=2: 方差 (等价于 ts_std_dev^2)
k=3: 偏度 (等价于 ts_skewness)
k=4: 峰度 (等价于 ts_kurtosis)
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
22, 66, 126 |
窗口 |
{k} |
2, 3, 4 |
阶数 |
TPL-1635: 龙头股因子增强模板
模板: sigmoid(rank(star_pm_global_rank))
说明: 对龙头股因子进行sigmoid增强
TPL-1636: purify数据清洗嵌套模板
模板: group_rank(ts_rank(purify({field}), {d}), {group})
| 占位符 |
可选值 |
说明 |
{field} |
任意字段 |
待清洗数据 |
{d} |
22, 66 |
排名窗口 |
{group} |
sector, industry |
分组 |
说明: purify自动化清洗异常值和噪声
TPL-1637: 理想振幅因子模板
模板:
amplitude = (high - low) / close;
ideal_amp = ts_percentage(amplitude, {d}, percentage=0.5);
group_rank(amplitude - ideal_amp, {group})
| 占位符 |
可选值 |
说明 |
{d} |
22, 66 |
百分位窗口 |
{group} |
sector, industry |
分组 |
说明: 实际振幅偏离理想振幅的程度
TPL-1638: 异同离差乖离率因子 (MACD风格)
模板:
ema_short = ts_decay_exp_window({field}, {d_short}, 0.9);
ema_long = ts_decay_exp_window({field}, {d_long}, 0.9);
dif = ema_short - ema_long;
ts_zscore(dif, {d_signal})
| 占位符 |
可选值 |
说明 |
{field} |
close, 价格字段 |
数据字段 |
{d_short} |
12, 22 |
短期EMA窗口 |
{d_long} |
26, 66 |
长期EMA窗口 |
{d_signal} |
9, 22 |
信号线窗口 |
TPL-1639: 收益率条件筛选反转
模板:
high_ret = ts_rank(returns, {d1}) > 0.8;
low_ret = ts_rank(returns, {d1}) < 0.2;
if_else(high_ret, -returns, if_else(low_ret, returns, 0))
| 占位符 |
可选值 |
说明 |
{d1} |
22, 66 |
排名窗口 |
说明: 只对极端收益做反转
TPL-1640: 三阶模板优化版
模板: <group_op/>(<ts_op1/>(<ts_op2/>(<field/>, <d1/>), <d2/>), <group/>)
| 占位符 |
可选值 |
说明 |
<group_op/> |
group_rank, group_zscore |
外层分组操作 |
<ts_op1/> |
ts_rank, ts_delta, ts_mean |
中层时序操作 |
<ts_op2/> |
ts_zscore, ts_rank, ts_ir |
内层时序操作 |
<field/> |
任意字段 |
数据字段 |
<d1/> |
60, 126, 252 |
内层窗口 |
<d2/> |
5, 22, 66 |
外层窗口 |
<group/> |
sector, industry |
分组 |
说明: 经典三阶嵌套结构,可灵活替换各层操作符
TPL-1641: ts_entropy信号检测模板
模板: ts_entropy({field}, {d})
| 占位符 |
可选值 |
说明 |
{field} |
returns, volume, 任意MATRIX字段 |
数据字段 |
{d} |
14, 22, 66 |
窗口 |
说明: 衡量时序数据的不确定性,高熵值表示更多随机性
TPL-1642: 熵+ZScore组合模板
模板: ts_zscore({field}, {d}) * ts_entropy({field}, {d})
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
14, 22 |
窗口 |
说明: RSI超买超卖 + 熵不确定性组合,捕捉可能的修正
TPL-1643: ts_ir+ts_entropy信号组合
模板:
signal = ts_ir({field}, {d}) + ts_entropy({field}, {d});
group_rank(signal, {group})
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
22, 66 |
窗口 |
{group} |
sector, industry |
分组 |
说明: IR(信息比率)和Entropy组合捕捉信号稳定性和分布特征
TPL-1644: trade_when市值过滤模板
模板: trade_when(rank(cap) > {threshold}, {alpha}, -1)
| 占位符 |
可选值 |
说明 |
{threshold} |
0.3, 0.5, 0.7 |
市值排名阈值 |
{alpha} |
主信号 |
原始Alpha |
说明: 仅交易大市值股票,降低prod corr
TPL-1645: trade_when盈利过滤模板
模板: trade_when(eps > {threshold} * est_eps, group_rank((eps - est_eps)/est_eps, industry), -1)
| 占位符 |
可选值 |
说明 |
{threshold} |
1.0, 1.1, 1.2 |
盈利超预期比例 |
说明: 只交易盈利超预期的股票
TPL-1646: trade_when量价触发模板
模板:
triggerTrade = (ts_arg_max(volume, {d}) < 1) && (volume > ts_sum(volume, {d})/{d});
trade_when(triggerTrade, {alpha}, -1)
| 占位符 |
可选值 |
说明 |
{d} |
5, 10 |
判断窗口 |
{alpha} |
-rank(ts_delta(close, 2)) |
主信号 |
说明: 量价突破触发条件交易
TPL-1647: trade_when情绪量过滤模板
模板:
sent_vol = vec_sum({sentiment_vec});
trade_when(rank(sent_vol) > {threshold}, -zscore({sentiment_field}) * sent_vol, -1)
| 占位符 |
可选值 |
说明 |
{sentiment_vec} |
scl12_alltype_buzzvec 等VECTOR字段 |
情绪向量 |
{sentiment_field} |
scl12_buzz, scl12_sentiment |
情绪字段 |
{threshold} |
0.9, 0.95 |
情绪量阈值 |
说明: 高情绪量时反向交易情绪
TPL-1648: bucket市值分组中性化模板
模板:
my_group2 = bucket(rank(cap), range='{range}');
group_neutralize({alpha}, my_group2)
| 占位符 |
可选值 |
说明 |
{range} |
'0,1,0.1', '0.1,1,0.1' |
分桶范围 |
{alpha} |
主信号 |
原始Alpha |
说明: 按市值分桶进行中性化,去除规模效应
TPL-1649: group_zscore时序组合模板
模板: group_zscore(ts_ir({field}, {d}), {group})
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
22, 66, 126 |
IR窗口 |
{group} |
sector, industry |
分组 |
说明: 在分组内进行IR的Z-score标准化
TPL-1650: scale+rank+ts组合模板
模板: scale(rank(ts_zscore({field}, {d})))
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
66, 126, 252 |
窗口 |
说明: 多层标准化处理信号
TPL-1651: Betting Against Beta模板
模板:
market_return = group_mean(returns, 1, market);
beta = ts_regression(returns, market_return, {d}, rettype=2);
-group_rank(beta, industry)
| 占位符 |
可选值 |
说明 |
{d} |
126, 252 |
回归窗口 |
说明: 反Beta投注因子,做多低Beta股票
TPL-1652: 跳跃因子模板
模板:
jump_up = ts_count(returns > ts_std_dev(returns, {d}) * {threshold}, {d});
jump_down = ts_count(returns < -ts_std_dev(returns, {d}) * {threshold}, {d});
group_rank(jump_down - jump_up, {group})
| 占位符 |
可选值 |
说明 |
{d} |
22, 66 |
统计窗口 |
{threshold} |
2, 2.5, 3 |
标准差倍数 |
{group} |
sector, industry |
分组 |
说明: 统计尾部跳跃事件的不对称性
TPL-1653: 量小换手率模板
模板:
turnover = volume / sharesout;
low_turnover = ts_percentage(turnover, {d}, percentage=0.2);
group_rank(turnover < low_turnover, {group})
| 占位符 |
可选值 |
说明 |
{d} |
22, 66 |
百分位窗口 |
{group} |
sector, industry |
分组 |
说明: 识别低换手率状态
TPL-1654: 隔夜收益因子模板
模板:
overnight_ret = open / ts_delay(close, 1) - 1;
group_rank(ts_mean(overnight_ret, {d}), {group})
| 占位符 |
可选值 |
说明 |
{d} |
5, 22, 66 |
平均窗口 |
{group} |
sector, industry |
分组 |
说明: 隔夜"拉锯战"因子
TPL-1655: sta1分组三因子模板
模板:
a = rank(group_rank(ts_rank(ts_backfill({field1}, {d1}), {d2}), sta1_top3000c20));
trade_when(rank(a) > {threshold}, -zscore(ts_zscore({field2}, {d3})) * a, {exit_threshold} - rank(a))
| 占位符 |
可选值 |
说明 |
{field1} |
任意字段 |
第一因子字段 |
{field2} |
模型字段如mdl175_01dtsv |
第二因子字段 |
{d1}, {d2}, {d3} |
各窗口参数 |
时间窗口 |
{threshold} |
0.03, 0.1 |
入场阈值 |
{exit_threshold} |
0.25, 0.5 |
出场阈值 |
说明: 使用sta1预定义分组的复合策略
TPL-1656: macro泛化模板
模板: group_rank(ts_delta(ts_zscore({macro_field}, {d1}), {d2}), country)
| 占位符 |
可选值 |
说明 |
{macro_field} |
宏观数据字段 |
宏观数据 |
{d1} |
126, 252 |
zscore窗口 |
{d2} |
5, 22 |
delta窗口 |
说明: 基于Labs分析macro的泛化模板
TPL-1657: ASI broker模板
模板:
signal = group_rank(ts_rank({broker_field}, {d}), market);
trade_when(volume > adv20, signal, -1)
| 占位符 |
可选值 |
说明 |
{broker_field} |
broker数据字段 |
券商数据 |
{d} |
22, 66 |
排名窗口 |
说明: ASI区域broker因子,需设置max_trade=ON
TPL-1658: Earnings超预期模板
模板:
surprise = (actual_eps - est_eps) / abs(est_eps);
group_rank(ts_zscore(surprise, {d}), industry)
| 占位符 |
可选值 |
说明 |
{d} |
66, 126 |
zscore窗口 |
说明: 盈利超预期因子
TPL-1659: CCI技术指标模板
模板:
tp = (high + low + close) / 3;
cci = (tp - ts_mean(tp, {d})) / (0.015 * ts_mean(abs(tp - ts_mean(tp, {d})), {d}));
group_rank(-cci, {group})
| 占位符 |
可选值 |
说明 |
{d} |
14, 20 |
CCI窗口 |
{group} |
sector, industry |
分组 |
说明: 商品通道指数(CCI)反转策略
TPL-1660: 0.618黄金比例幂变换模板
模板:
power_signal = signed_power({field}, 0.618);
group_rank(ts_zscore(power_signal, {d}), {group})
| 占位符 |
可选值 |
说明 |
{field} |
任意MATRIX字段 |
数据字段 |
{d} |
66, 126 |
zscore窗口 |
{group} |
sector, industry |
分组 |
说明: 使用黄金比例0.618进行幂次变换
附录A:标准时间窗口
| 窗口代号 |
天数 |
含义 |
d_week |
5 |
一周 |
d_month |
22 |
一月 |
d_quarter |
66 |
一季度 |
d_half |
126 |
半年 |
d_year |
252 |
一年 |
d_2year |
504 |
两年 |
使用规则:
- 反转因子: 短窗口
{3, 5, 22}
- 动量因子: 中窗口
{22, 66}
- 长期趋势: 长窗口
{126, 252, 504}
- 回归/波动: 超长窗口
{250, 500, 750}
附录B:常用操作符分类
时序操作符 <ts_op/>
| 操作符 |
用途 |
ts_mean |
移动平均 |
ts_rank |
时序排名 |
ts_delta |
差分 |
ts_std_dev |
移动标准差 |
ts_ir |
信息比率 |
ts_zscore |
时序Z-score |
ts_corr |
滚动相关性 |
ts_regression |
滚动回归 |
ts_decay_linear |
线性衰减 |
ts_decay_exp_window |
指数衰减 |
ts_sum |
滚动求和 |
ts_backfill |
数据回填 |
ts_arg_min |
最小值位置 |
ts_arg_max |
最大值位置 |
ts_max |
滚动最大值 |
ts_min |
滚动最小值 |
ts_delay |
延迟 |
ts_moment |
k阶中心矩 |
ts_co_skewness |
协偏度 |
ts_co_kurtosis |
协峰度 |
ts_partial_corr |
偏相关 |
ts_triple_corr |
三元相关 |
ts_theilsen |
Theil-Sen回归 |
ts_poly_regression |
多项式回归残差 |
ts_vector_neut |
向量中性化 |
ts_weighted_decay |
加权衰减 |
ts_min_max_cps |
最小最大压缩 |
ts_max_diff |
与最大值差 |
ts_av_diff |
与均值差 |
ts_quantile |
分位数 |
ts_percentage |
百分位 |
ts_median |
中位数 |
ts_product |
累积乘积 |
ts_count_nans |
NaN计数 |
ts_scale |
时序缩放 |
ts_target_tvr_hump |
目标换手率Hump |
ts_target_tvr_delta_limit |
Delta换手率限制 |
分组操作符 <group_op/>
| 操作符 |
用途 |
group_rank |
分组排名 |
group_neutralize |
分组中性化 |
group_zscore |
分组Z-score |
group_mean |
分组均值 |
group_sum |
分组求和 |
group_extra |
分组提取/填补 |
group_backfill |
分组回填 |
group_normalize |
分组归一化 |
group_vector_neut |
分组向量中性化 |
group_vector_proj |
分组向量投影 |
group_count |
分组计数 |
group_std_dev |
分组标准差 |
向量操作符 <vec_op/>
| 操作符 |
用途 |
vec_avg |
向量平均 |
vec_sum |
向量求和 |
vec_max |
向量最大 |
vec_min |
向量最小 |
vec_stddev |
向量标准差 |
vec_count |
向量计数 |
vec_norm |
向量归一化 |
vec_zscore |
向量Z-score |
vec_range |
向量范围 |
事件/时间操作符
| 操作符 |
用途 |
days_from_last_change |
距离上次变化天数 |
last_diff_value |
最近不同值 |
ts_step |
时间步长 |
信号处理操作符
| 操作符 |
用途 |
signed_power |
带符号幂变换 |
clamp |
边界限制 |
left_tail |
左尾截断 |
right_tail |
右尾截断 |
fraction |
分数映射 |
nan_out |
NaN外推 |
purify |
数据清洗 |
keep |
条件保留 |
scale_down |
缩放降维 |
hump |
Hump平滑 |
hump_decay |
Hump衰减 |
其他常用操作符
| 操作符 |
用途 |
rank |
截面排名 |
zscore |
截面Z-score |
sigmoid |
Sigmoid归一化 |
winsorize |
极端值截断 |
truncate |
截断 |
tail |
尾部处理 |
scale |
缩放 |
filter |
过滤 |
densify |
稠密化 |
bucket |
分桶 |
log |
对数 |
abs |
绝对值 |
if_else |
条件判断 |
trade_when |
条件交易 |
regression_neut |
回归中性化 |
regression_proj |
回归投影 |
is_nan |
NaN检测 |
is_not_nan |
非NaN检测 |
inst_pnl |
单标的PnL |
convert |
单位转换 |
pasteurize |
去无效值 |
附录C:数据字段分类
量价类 <pv_field/>
close, open, high, low, vwap
returns, volume, adv20, sharesout, cap
基本面类 <fundamental_field/>
assets, sales, ebitda, net_income, eps, operating_income
goodwill, debt, cash, equity, gross_profit
fnd6_*, fnd72_*, mdl175_*, mdl163_*
debt_to_equity, roe, roa
分析师类 <analyst_field/> (VECTOR)
anl4_eps_mean, anl4_eps_low, anl4_eps_high
anl4_revenue_mean, anl4_fcf_value, anl4_netprofit_mean
anl4_adjusted_netincome_ft, anl4_bvps_flag
oth41_s_west_*, analyst_*
情绪类 <sentiment_field/>
scl12_sentiment, scl12_buzz, scl12_alltype_buzzvec
snt_value, snt_buzz, snt_buzz_ret, snt_buzz_bfl
nws18_relevance, nws18_ber
nws12_prez_result2, nws12_prez_short_interest
mws85_sentiment, mws46_mcv
期权类 <option_field/>
option8_*, option14_*
implied_volatility_call_120, implied_volatility_call_270
parkinson_volatility_120, parkinson_volatility_270
pcr_vol_10, pcr_vol_30
put_delta, call_delta, put_gamma, call_gamma
put_theta, call_theta, put_vega, call_vega
call_breakeven_10, put_breakeven_10
模型类 <model_field/>
mdl175_01dtsv, mdl175_01icc
mdl163_*, mdl*
分组类 <group/>
industry, sector, subindustry
market, country, exchange
sta1_top3000c20, sta1_*
pv13_*, pv27_*