在创建 Alpha 时,你 可以通过添加条件来精细控制你的交易行为。这就像给你的策略设置一些“如果……就……”的规则,让它变得更聪明。你可以使用常见的逻辑操作符(>
、<
、>=
、<=
、==
等)来创建这些条件。
- 例子: 如果你想只在股票成交量比平时高时才进行交易,你可以设置条件为
volume > adv20
。
💡 注意: 过于严格的条件可能会减少你的交易机会,同时增加“过拟合”的风险,也就是你的策略只在历史数据上表现的特别好,但在未来却失效。
if_else()
:简单的条件判断 🔀
if_else()
是一个非常基础但强大的操作符,它能根据条件返回不同的值。
- 基本用法:
if_else(条件, 如果条件为真,返回这个值, 如果条件为假,返回这个值)
- 简化写法: 就像我们之前在动量策略中看到的,你也可以使用更简洁的
条件 ? 值1 : 值2
格式,效果是一样的。
trade_when()
:决定何时交易 🎯
trade_when()
是一个更高级的操作符,它能让你精确控制 Alpha 模型的“入场”和“出场”时机,只在满足特定条件时才更新仓位。
trade_when()
需要三个输入:
- 入场条件(
entry_condition
):- 当这个条件为真时,系统会根据你的 Alpha 表达式来计算并更新你的仓位。
- 例子: 你可以设定
volume > adv20
作为入场条件,意思是只有当成交量异常高时,才开始使用你的 Alpha 模型进行交易。
- Alpha 表达式(
Alpha
):- 当入场条件满足时,系统会执行你的 Alpha 公式来决定具体买卖什么。
- 例子: 在动量策略中,这个表达式可以是
ts_sum(returns > 0 ? 1 : 0, 250)
。
- 出场条件(
exit_condition
):- 当这个条件为真时,系统会平掉你之前建立的仓位(即清仓)。
- 例子: 如果你不想清仓,可以将出场条件设置为
-1
。
- 工作流程:
- 入场时: 如果入场条件为真,每天都更新你的仓位。
- 出场时: 如果出场条件为真,平掉仓位。
- 两者都为假时: 保持你上一次入场时的仓位不变,直到下次入场或出场条件满足。
trade_when()
在动量策略中的应用 💡
我们可以用 trade_when()
来优化之前提到的动量 Alpha。
- 策略思想: 动量效应往往在成交量突然放大时更有效。所以,我们可以只在成交量异常高 时才建立动量仓位,并在之后保持仓位不变。
- 设置:
- 入场条件:
- 你可以用
volume > adv20
或volume > ts_mean(volume, N)
来判断成交量是否异常高。你还可以使用更高级的判断,比如volume * vwap > ts_mean(volume * vwap, N)
,它将成交量和价格结合起来。
- 你可以用
- Alpha 表达式:
- 使用我们之前学的动量公式,比如
positive_days
(过去一年上涨天数)。
- 使用我们之前学的动量公式,比如
- 出场条件:
- 由于动量是长期效应,你可以把出场条件设为
-1
,这意味着一旦建立仓位,就一直持有。当然,你也可以根据自己的想法设置一个有效的出场条件。
- 由于动量是长期效应,你可以把出场条件设为
- 入场条件:
- 中性化设置:
- 动量效应通常是跨行业的(比如所有科技股一起涨),而不是在行业内部(比如一个行业里有些股票涨有些股票跌)。因此,在设置中性化选项时,最好选择“市场中性化”(Market Neutralization)或“行业中性化”(Sector Neutralization),而不是更细的分组。