You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3182 lines
105 KiB
3182 lines
105 KiB
# 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)
|
|
|
|
### TPL-1401: group_extra填补模板
|
|
```
|
|
模板: 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)
|
|
```
|
|
| 占位符 | 可选值 | 说明 |
|
|
|--------|--------|------|
|
|
| `{d}` | `5`, `10` | 窗口 |
|
|
|
|
**说明**: 今日成交量为近期最大且高于均值时交易
|
|
|
|
---
|
|
|
|
### 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})
|
|
```
|
|
| 占位符 | 可选值 | 说明 |
|
|
|--------|--------|------|
|
|
| `{d}` | `20`, `22` | 窗口 |
|
|
|
|
**说明**: 低波动做反转,高波动做动量
|
|
|
|
---
|
|
|
|
### 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_*
|
|
```
|
|
|